深入了解Cookie(1)------selenium2進行Cookie操作的前奏
世界上最寬闊的是海洋,比海洋還寬闊的是天空,比天空還寬闊的是人的心量。做人的心量有多大,人生的成就就有多大。不為一己之利去爭、去鬥、去奪,掃除報複之心和嫉妒之念,自然“心底無私天地寬”。
Cookie是當前識別用戶,實現持久會話的最好方式。Cookie最初是由網景公司開發,但是現在所有的主要瀏覽器都支持它。
Cookie的類型:會話Cookie和持久Cookie
會話Cookie是一種臨時Cookie,它記錄了用戶訪問站點時的設置和偏好。用戶退出瀏覽器時,會話Cookie就被刪除了。
持久Cookie生存的時間相對較長,他們存儲在硬盤上,瀏覽器退出,計算機重啟它們仍然存在。通常會用持久Cookie維護用戶會周期性訪問的站點的配置文件或登錄名。
會話Cookie和持久Cookie的唯一區別就是他們的過期時間。
如果設置了Discard參數,或者沒有設置Expires或Max-Age參數來說明擴展的過期時間,這個Cookie就是一個會話Cookie。
想做持久Cookie-----一定要設置Expires或Max-Age參數。
Cookie的成分和版本
現在使用的Cookie規範有兩個不同的版本:Cookies版本0(有時被稱為Netscape Cookies)和Cookies版本1(RFC2965)。
Cookies版本1是對Cookies版本0的擴展,應用不如後者廣泛。
Cookie規範版本0和版本1都不是昨晚HTTP1.1規範的一部分提供的。
標題 | 描述 | 位置 |
---|---|---|
持久客戶端狀態:HTTP Cookies | 最初的Netscape cookie 標準 | https://home.netscape.com/newsref/std/cookie_spec.html |
RFC 2965:HTTP 狀態管理機製 | 2000年10月的cookie標準,廢棄了RFC2109 | https://www.ietf.org/rfc/rfc2965.txt |
cookies版本0(Netscape)
定義了Set-Cookie響應首部、Cookie請求首部以及用於控製Cookie的字段
版本0的Set-Cookie首部
Set-Cookie首部有一個強製性的Cookie名和Cookie值,後麵跟著可選的Cookie屬性,中間由分號分隔。
Set-Cookie屬性
Set-Cookie屬性 | 描述及實例 |
NAME= VALUE | 強製的。NAME和VALUE都是字符序列,除非包含在雙引號內,否則不包含分號、逗號、等號和空格。Web服務器可以創建任意的NAME=VALUE關聯,在後繼對站點的訪問中會將其送回給Web服務器:Set-Cookie: customer=Mary |
Expires |
可選的。這個屬性會指定一個日期字符串,用來定義Cookie的實際生存期。一旦到了過期日期,就不再存儲或發布這個Cookie了,日期的格式為:Weekday, DD-Mon-YY HH:MM:SS GMT 唯一合法的時區為GMT,各日期元素之間的分隔符一定要是長劃線。如果沒有指定Expires,cookie 就會在用戶會話結束時過期: Set-Cookie:foo = bar;expires=Wednesday,09-Nov-99 23:12:30 GMT |
Domain |
可選的。瀏覽器隻向指定的服務器主機名發送Cookie。這樣服務器就將Cookie限製在了特定的域中。acme.com域與anvil.acme.com 和shipping.crat.acme.com相匹配,但是與www.cnn.com就不匹配。 隻有指定域中的主機才能為一個域設置Cookie,這些域中至少有兩個或三個句號,以防止出現.com 、.edu和va.us等形式的域。這裏列出了一組固定的特定高層域,落在這個範圍的域隻需要兩個句號。所有其他域至少需要三個句號,特定的高層域包括: .com、.edu、.net、.org、.gov、.mil、.int、.biz、.info、.name、.museum、.coop、.aero和.pro。 如果沒有指定域,就默認為產生Set-Cookie響應的服務器的主機名: Set-Cookie:SHIPPING=FEDEX;domain="jose-hardware.com" |
Path |
可選的。通過這個屬性可以為服務器上特定的文檔分配Cookie,如果path屬性是一個URL路徑前綴,就可以附加一個Cookie。路徑/foo與/foobar和/foo/bar.html相匹配。路徑.與域名中所有的內容都匹配。 如果沒有指定路徑,就將其設置為產生Set-Cookie響應的URL的路徑: Set-Cookie: lastorder=00183; path=/orders |
Secure |
可選的。如果包含了這樣一個屬性,就隻有在HTTP使用SSL安全連接時才會發送Cookie: Set-Cookie: private_id=733; secure |
版本0的Cookie首部
客戶端發送請求時,會將所有與域、路徑和安全過濾器相匹配的未過期Cookie都發送給這個站點。所有Cookie都被組合到一個Cookie首部中:
Cookie:session-id=002-2222233-2233322; session-id-time=1033949384
Cookies1版本(RFC 2965)
RFC 2965定義了一個Cookie的擴展版本。這個版本1標準引入了Set-Cookie2首部和cookie2首部,它比網景的標準略複雜,還未得到完全的支持。
改動項:
1.為每個Cookie關聯上解釋性文本,對其目的進行解釋
2.允許在瀏覽器退出時,不考慮過期時間,將Cookie強製銷毀
3.用相對秒數,而不是絕對日期來表示Cookie的Max-Age
4.通過URL端口號,而不僅僅是域和路徑過濾器(如果有的話)
5.為實現互操作性使用的版本號
6.在Cookie首部從名字中區分出附加關鍵字的$前綴
Cookie版本1的語法如下:
set-cookie | = | "Set-Cookie2:" cookies |
cookies | = | 1#cookie |
cookie | = | NAME "=" VALUE * (" , set-cookie-av") |
NAME | = | attr |
VALUE | = | value |
set-cookie-av | = | "Comment" "=" value |
| | "CommentURL" “=” <”> http_URL <"> | |
| | "Discard" | |
| | "Domain" "=" value | |
| | “Max-Age” "=" value | |
| | "Path" "=" value | |
| | "Port" [ "=" <"> portlist <"> ] | |
| | "Secure" | |
| | "Version" "=" 1* DIGIT | |
portlist | = | 1#portnum |
portnum | = | 1*DIGIT |
cookie | = | "Cookie:" cookie-version 1*((";" | ",") cookie-value) |
cookie-value | = | NAME "=" VALUE [";" path] [";" domain] [";" port] |
cookie-version | = | "$Version" "=" |
NAME | = | attr |
VALUE | = | value |
path | = | "$Path" "=“ value |
domain | = | "$Domain" "=" value |
port | = | "$Port" [ "=" <"> value <"> ] |
cookie2 | = | "Cookie2:" cookie-version |
版本1的Set-Cookie2首部
Set-cookie2屬性 | 描述及實例 |
NAME=VALUE | 強製的。WEB服務器可以創建任意的NAME=VALUE關聯,可以在後繼對站點的訪問中將其發回給WEB服務器,"$"是保留字符,所以名字一定不能以它開頭 |
Version | 強製的。這個屬性值是一個整數,對應於cookie規範的版本、RFC 2965 為版本1: Set-Cookie2: part="Rocket_launcher_0001"; Version="1" |
Comment | 可選的。這個屬性說明了服務器準備如何使用這個cookie。用戶可以通過檢查次策略來確定是否允許使用帶有這個cookie的會話,這個值必須采用UTF-8編碼 |
CommentURL | 可選的。這個屬性提供了一個URL指針,指向詳細描述了cookie目的及策略的文檔。用戶可以通過查看此策略來判定是否允許使用帶有這個cookie的會話 |
Discard | 可選的。如果提供了這個屬性,就會在客戶端程序終止時,指示客戶端放棄這個cookie |
Domain | 可選的。瀏覽器隻向指定域中的服務器主機名發送cookie。這樣服務器就可以將cookie限製在特定域中了,acme.com域與主機名anvil.acme.com和shipping.crate.acme.com相匹配,但不匹配於www.cnn.com。域名匹配的規則基本上與網景cookie一樣,但有幾條附加的規則。 |
Max-Age | 可選的。這個屬性的值是一個整數,用於設置以秒為單位cookie生存期。客戶端應該根據HTTP/1.1的使用期計算規則來計算cookie的使用期。cookie的使用期比Max-Age大時,客戶端就應該將這個cookie丟棄。值為零說明應該立即將那個cookie丟棄。 |
Path | 可選的。通過這個屬性可以為服務器上的特定文檔指定cookie。如果path屬性是一個URL路徑的前綴,就可以附加一個cookie。路徑/foo匹配於/foobar和/foo/bar.html。路徑" / "匹配於域中所有內容。如果沒有指定路徑,就將其設置為生成Set-Cookie響應的路徑。 |
Port | 可選的。這個屬性可以單獨作為關鍵字使用,也可以包含一個由逗號分隔的、可以應用cookie的端口列表。如果有端口列表,就隻能向端口與列表中的端口相匹配的服務器提供cookie,如果單獨提供關鍵字Port而沒有值,就隻能向當前響應服務器的端口號提供cookie |
Secure | 可選的。如果包含這個屬性,就隻有在HTTP中使用SSL安全連接時才能發送cookie |
版本1的Cookie首部
版本1的cookie會帶回與傳送的每個cookie相關的附加信息,用來描述每個cookie途徑的過濾器。每個匹配的cookie都必須包含來自相應Set-Cookie2首部的所有Domain、Port或path屬性。
最後更新:2017-04-03 06:03:06
上一篇:
css+div
下一篇:
PHP靜態延遲綁定和普通靜態效率簡單對比
天貓為何一再好心辦錯事
如何定製 SSH 來簡化遠程訪問
在ASP.NET MVC中使用“RadioButtonList”和“CheckBoxList”
sql server2005裏導入bak文件
MongoDB開發學習(1)開天辟地,經典入門
采用共享經濟革新的平台——匯新雲
IBM WebSphere Application Server V6.1 Fix Pack 29於2010.01.18發布
【直播沉澱】基於阿裏雲數加MaxCompute的企業大數據倉庫架構建設思路
如果沒有Visual Studio 2015,我們如何創建.NET Core項目 ?
腦洞 | 把圓周率π用鋼琴彈出來,是種什麼體驗?