1. 程式人生 > >後臺新增cookie,前端jsp獲取不到

後臺新增cookie,前端jsp獲取不到

在開發中遇到問題:後臺
Cookie c=new Cookie(“Cookie”, “11111111111111111111”);
c.setPath(“/”);
response.addCookie(c);
在前端jsp獲取不到方法:

Cookie[] cc=request.getCookies();
if(cc!=null){
for(int i=0;i<cc.length;i++){
    System.out.println(cc[i].getName());
    System.out.println(cc[i].getValue());
    System.out
.println("##################"+i+cc[i].isHttpOnly()); }

為什麼呢:

這時候我決定檢視http協議中的一些資訊如圖:
https://img-blog.csdn.net/20180116181618284?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzQwNjQ4MTE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
發現我add的cookie在response的set-cookie中,
所以這時候只能通過
List s=(List)response.getHeaders(“Set-Cookie”);
for(String ss: s){
System.out.println(“Set-Cookie====”+ss);
}
拿出第一次在後臺增加的cookie。
如果在這個會話在次請求後臺,伺服器會將response中的cookie放到request中的請求頭中,在接下的請求中Cookie[] cc=request.getCookies(); 都能拿到你新增的cookie了;
其實前端可以通過js:document.cookie拿到伺服器返回的cookie資訊,無論是在response的header頭中的set-cookie亦或者是在request中的cookie屬性中都能拿到,但是隻能拿到cookie的屬性httponly為false的cooike,當你新增cookie時候設定
c2.setHttpOnly(true);時候,document.cookie是拿不到的;
這就是為什麼你請求伺服器通過document.cookie拿不到伺服器自動給你生成的sessionid,因為tomact自動給你生成的sessionid加到cookie設定httponly為true,
以上結論都是我通過自測驗證,你也可以按照我提供的思路自行確認,如有錯誤歡迎指出