閱讀407 返回首頁    go 阿裏雲 go 技術社區[雲棲]


深入了解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

  上一篇:go css+div
  下一篇:go PHP靜態延遲綁定和普通靜態效率簡單對比