如果步驟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 時才支持。