深入瞭解Cookie(1)------selenium2進行Cookie操作的前奏

來源:互聯網
上載者:User

標籤:style   http   color   使用   strong   width   

世界上最寬闊的是海洋,比海洋還寬闊的是天空,比天空還寬闊的是人的心量。做人的心量有多大,人生的成就就有多大。不為一己之利去爭、去鬥、去奪,掃除報複之心和嫉妒之念,自然“心底無私天地寬”。


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 標準 http://home.netscape.com/newsref/std/cookie_spec.html
RFC 2965:HTTP 狀態管理機制 2000年10月的cookie標準,廢棄了RFC2109 http://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屬性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.