COOKIE的SECURE屬性


昨天跑了一下測試,發現服務器明明向客戶端寫了COOKIE,而且瀏覽器也木有禁用COOKIE,但是從瀏覽器再訪問服務器,SessionID死活不會傳到服務器。搞了一個上午,找不到原因,正在焦頭爛額的時候,一個前輩幫了大忙。原來我的訪問URL協議頭是HTTP,而Weblogic里面的配置被人改動了。把cookie-secure的值改為了truetrue意味着"指示瀏覽器僅通過 HTTPS 連接傳回 cookie。這可以確保 cookie ID 是安全的,且僅用於使用 HTTPS 的網站。如果啟用此功能,則 HTTP 上的會話 Cookie 將不再起作用。"唉,明白了,怪不得一直都取不到COOKIE。

好了,問題解決了,下面我自己再實驗一下:

我自己的電腦用的Tomcat,首先,把cookie-secure的值設為false,創建一個session:

 1 public void service(HttpServletRequest request, HttpServletResponse response) {
 2         // 創建cookie
 3         Cookie cookie = new Cookie("key", "value");
 4         // 關鍵地方:cookie設為false
 5         cookie.setSecure(false);
 6         response.addCookie(cookie);
 7         // 從request中取得cookie,並輸出
 8         Cookie[] cookies = request.getCookies();
 9         for (Cookie c : cookies) {
10             System.out.println(c.getValue());
11         }
12         RequestDispatcher dispatcher = request
13                 .getRequestDispatcher("index.jsp");
14         try {
15             dispatcher.forward(request, response);
16         } catch (ServletException e) {
17             e.printStackTrace();
18         } catch (IOException e) {
19             e.printStackTrace();
20         }
21     }

好,我們訪問一下這個地址:http://localhost:8080/servlet/index.do

用Fiddler來看一下客戶端發出的信息:

好,我們再訪問一下前面的地址:

這個時候我們可以看到客戶端發出的cookie里面,有key=value,說明客戶端把cookie發給了服務器端。

那如果我們在服務器端設置cookie.setSecure(true)呢?

先上代碼:

 1 public void service(HttpServletRequest request, HttpServletResponse response) {
 2         // 創建cookie
 3         Cookie cookie = new Cookie("key", "value");
 4         // 關鍵地方:cookie設為false
 5         cookie.setSecure(true);  6         response.addCookie(cookie);
 7         // 從request中取得cookie,並輸出
 8         Cookie[] cookies = request.getCookies();
 9         if (cookies != null) {
10             for (Cookie c : cookies) {
11                 System.out.println(c.getValue());
12             }
13         }
14         RequestDispatcher dispatcher = request
15                 .getRequestDispatcher("index.jsp");
16         try {
17             dispatcher.forward(request, response);
18         } catch (ServletException e) {
19             e.printStackTrace();
20         } catch (IOException e) {
21             e.printStackTrace();
22         }
23     }

第一次訪問:

這是request的信息。

服務器的返回信息如下:

我們可以看到服務器發給客戶端的信息中有這么一行:Set-Cookie:key=value; Secure

多了一個Secure。

第二次訪問:

我們發現key=value這個cookie已經沒有了。

那我們用https協議頭來試着訪問一下看看:

我們看到key=value又發給了服務器端了。

唉,其實這些都是基礎知識了,看來自己的只是還是很薄弱。繼續努力吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM