標籤: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屬性。