(http請求+cookie)的交互流程


如果步驟5攜帶的是過期的cookie或者是錯誤的cookie,那么將認證失敗,返回至要求身份認證頁面。

當前 Cookie 有兩個版本:Version 0 和 Version 1。通過它們有兩種設置響應頭的標識,分別是 “Set-Cookie”和“Set-Cookie2”。這兩個版本的屬性項有些不同,表 10-1 和表 10-2 是兩個版本的屬性介紹。

 

表Version 0 屬性項介紹
屬性項 屬性項介紹
NAME=VALUE 鍵值對,可以設置要保存的 Key/Value,注意這里的 NAME 不能和其他屬性項的名字一樣
Expires 過期時間,在設置的某個時間點后該 Cookie 就會失效,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT
Domain 生成該 Cookie 的域名,如 domain="xulingbo.net"
Path 該 Cookie 是在當前的哪個路徑下生成的,如 path=/wp-admin/
Secure 如果設置了這個屬性,那么只會在 SSH 連接時才會回傳該 Cookie

 

表Version 1 屬性項介紹
屬 性 項 屬性項介紹
NAME=VALUE 與 Version 0 相同
Version 通過 Set-Cookie2 設置的響應頭創建必須符合 RFC2965 規范,如果通過 Set-Cookie 響應頭設置,默認值為 0,如果要設置為 1,則該 Cookie 要遵循 RFC 2109 規范
Comment 注釋項,用戶說明該 Cookie 有何用途
CommentURL 服務器為此  Cookie 提供的 URI 注釋
Discard 是否在會話結束后丟棄該 Cookie 項,默認為 fasle
Domain 類似於 Version 0
Max-Age 最大失效時間,與 Version 0 不同的是這里設置的是在多少秒后失效
Path 類似於 Version 0
Port 該 Cookie 在什么端口下可以回傳服務端,如果有多個端口,以逗號隔開,如 Port="80,81,8080"
Secure 類似於 Version 0

以上兩個版本的 Cookie 中設置的 Header 頭的標識符是不同的,我們常用的是 Set-Cookie:userName=“junshan”; Domain=“xulingbo.net”,這是 Version 0 的形式。針對 Set-Cookie2 是這樣設置的:Set-Cookie2:userName=“junshan”; Domain=“xulingbo.net”; Max-Age=1000。但是在 Java Web 的 Servlet 規范中並不支持 Set-Cookie2 響應頭,在實際應用中 Set-Cookie2 的一些屬性項卻可以設置在 Set-Cookie 中,如這樣設置:Set-Cookie:userName=“junshan”; Version=“1”;Domain=“xulingbo.net”;Max-Age=1000。

Cookie的作用:

1.解決了認證(登錄)后,下次訪問還需要認證(登錄)的重復認證問題。

2.可以記住用戶名和密碼,增強用戶體驗。

Cookie的缺點:

1.安全問題

cookie數據保存在客戶端,有可能被篡改或盜取。

Cookie 數據可以被訪問到,就像我們前面通過 Firefox 的插件 HttpFox 可以看到所有的 Cookie 值。不僅可以查看 Cookie,甚至可以通過 Firecookie 插件添加、修改 Cookie,所以 Cookie 的安全性受到了很大的挑戰。

相比較而言 Session 的安全性要高很多,因為 Session 是將數據保存在服務端,只是通過 Cookie 傳遞一個 SessionID 而已,所以 Session 更適合存儲用戶隱私和重要的數據。

2.數據傳輸量大的問題

cookie 可以讓服務端程序跟蹤每個客戶端的訪問,但是每次客戶端的訪問都必須傳回這些 cookie,如果 cookie 很多,這無形地增加了客戶端與服務端的數據傳輸量,而 Session 的出現正是為了解決這個問題。

瀏覽器會附帶具有相同域名的所有cookie,如果是二級域名,頂級域名的cookie也會一起附帶。

同一個客戶端每次和服務端交互時,不需要每次都傳回所有的 Cookie 值,而是只要傳回一個 ID,這個 ID 是客戶端第一次訪問服務器的時候生成的,而且每個客戶端是唯一的。這樣每個客戶端就有了一個唯一的 ID,客戶端只要傳回這個 ID 就行了,這個 ID 通常是 NANE 為 JSESIONID 的一個 Cookie。

3. 瀏覽器對cookie的數量和大小有限制

 Session的三種工作方式:

1. 基於 URL Path Parameter,默認支持。

2. 基於 Cookie,如果沒有修改 Context 容器的 cookies 標識,默認也是支持的。

3. 基於 SSL,默認不支持,只有 connector.getAttribute("SSLEnabled") 為 TRUE 時才支持。


免責聲明!

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



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