javaWeb中的cookie


什么是會話?

簡單來說:用戶打開瀏覽器,連續進行多個操作,關閉瀏覽器,整個過程稱為一個會話 !

在會話的過程中,會產生數據,需要一個對象來保存數據,該對象能針對每個會話獨立保存數據,用什么對象呢?

request:request只是針對一次請求響應,顯然不滿足!

servletContext:servletContext是公共的,也是不行的!

cookie:保存用戶數據到客戶端瀏覽器中,滿足要求!

Cookie的實現原理:

 

1、客戶端提交會話數據到服務器,服務器選擇在響應中保存cookie信息 在響應中添加頭 set-Cookie : key=value
2、客戶端接收set-Cookie后,將cookie信息 保存到瀏覽器中
3、客戶端訪問服務器端下一次請求,會自動攜帶之前保存cookie信息,在請求頭中添加cookie:key=value
4、服務器端就可以通過 cookie請求頭信息,獲得cookie數據

 

服務器向客戶端寫cookie信息

1、cookie的創建

Cookie c = new Cookie(name,value); // 生成響應頭信息 set-cookie: name=value,name=value,name=value...
* 對於value可以讀取 getValue setValue
* 對於name 只讀 getName

2、需要將cookie寫到客戶端
response.addCookie(c);

3、關於會話cookie和持久cookie

cookie寫到瀏覽器端,默認保存在瀏覽器內存緩存區中(會話cookie),當關閉瀏覽器后,會話cookie信息就會刪除
如果需要在關閉瀏覽器后,cookie信息還存在,將cookie信息持久化到硬盤上(持久cookie) --- 設置cookie的maxAge

4、path和domain 的設置 ,限制訪問哪個站點或者哪個資源 攜帶cookie
domain 默認是域名,當前網站域名 .sina.cn、baidu.com
訪問baidu,設置domain為.baidu.com ------ 第一方cookie
訪問baidu,設置domain為.google.com ------ 第三方cookie
* 大多數瀏覽器 阻止第三方cookie


有效訪問路徑 path ,如果訪問資源路徑 和 cookie設置有效訪問路徑 不符合,請求中將不會攜帶cookie信息
例如cookie設置有效路徑為:   cookie.setPath("/aaa");
會生成響應信息為:Set-Cookie: last=1346038104734; Expires=Wed, 26-Sep-2012 03:28:24 GMT; Path=/aaa

訪問資源路徑 :  http://localhost/day7/lastvisit 與 path:/aaa不符合 不會攜帶cookie

** 默認path路徑 就是生成cookie訪問路徑

 

總結:

生成cookie的代碼:

Cookie c = new Cookie(name,value);
c.setMaxAge(...);
c.setPath(...);
response.addCookie(c);

查找cookie的工具類

public static Cookie findCookie(Cookie[] cookies, String name) {
  if (cookies == null) {
    // cookie 就不存在
    return null;
  } else {
    for (Cookie cookie : cookies) {
      if (cookie.getName().equals(name)) {
        // 找到
        return cookie;
      }
  }
    // 沒找到
    return null;
  }
}

 


免責聲明!

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



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