Cookie

現(xiàn)在的web站點(diǎn)希望能夠提供個(gè)性化的接觸,它們希望對(duì)連接另一端的用戶有更多的了解,并且能在用戶瀏覽頁面時(shí)對(duì)其進(jìn)行跟蹤。比如說Amazon.com這樣的流行在線商店可以通過以下幾種方式實(shí)現(xiàn)站點(diǎn)的個(gè)性化:

  • 個(gè)性化的問候
    專門為用戶生成的歡迎詞和頁面內(nèi)容,使用戶感覺更加親切。
  • 有的放矢的推薦
    通過了解客戶的興趣,商店可以推薦一些他們認(rèn)為客戶會(huì)感興趣的商品。
  • 管理信息的存檔
    在線購(gòu)物的用戶不喜歡一次又一次的填寫繁瑣的地址和信用卡信息。有些站點(diǎn)會(huì)將這些信息存儲(chǔ)在一個(gè)數(shù)據(jù)庫中,只要他們識(shí)別出用戶就可以使用存檔的信息,使得購(gòu)物體驗(yàn)更加便捷。
    HTTP識(shí)別用戶有下列技巧。
  • 承載用戶身份信息的HTTP首部。
  • 通過用戶的IP地址進(jìn)行識(shí)別。
  • 用戶登錄,用認(rèn)證方式來識(shí)別用戶。

1.HTTP首部

承載用戶相關(guān)信息的HTTP首部:

首部名稱 首部類型 描述
From 請(qǐng)求 用戶的E-mail地址
User-Agent 請(qǐng)求 用戶的瀏覽器軟件
Referer 請(qǐng)求 用戶是從這個(gè)頁面上依照鏈接跳轉(zhuǎn)過去的
Authorization 請(qǐng)求 用戶名和密碼
Client-IP 擴(kuò)展請(qǐng)求 客戶端IP地址
Cookie 擴(kuò)展請(qǐng)求 服務(wù)器產(chǎn)生的ID標(biāo)簽

From首部包含了用戶的E-mail地址,每個(gè)用戶都有不同的E-mail所以在理想情況下這個(gè)首部可以用來識(shí)別用戶,但是由于用戶的E-mail地址太過隱私,一般都不會(huì)發(fā)送。
User-Agent首部可以將用戶所用瀏覽器的信息告知服務(wù)器,包括程序名稱和版本,但是這個(gè)對(duì)于識(shí)別用戶作用不大。
Referer首部可以告訴服務(wù)器是從哪個(gè)頁面上跳轉(zhuǎn)過來的,它可以說明用戶之前訪問過哪個(gè)頁面,通過它可以更好的理解用戶的瀏覽行為,了解用戶的興趣。
From,User-Agent,Referer首部都不足以實(shí)現(xiàn)可靠的識(shí)別。

2.客戶端IP地址

用戶的IP地址一般很少變化,在HTTP首部并不提供客戶端IP地址,但是we服務(wù)器可以找到承載HTTP請(qǐng)求的TCP連接另一端的IP地址,所以通過客戶端IP地址去識(shí)別用戶看起來是可行的。
但是這種方法存在的幾個(gè)缺點(diǎn)限制了其作為客戶端識(shí)別手段的應(yīng)用:

  • 很多因特網(wǎng)服務(wù)提供商會(huì)動(dòng)態(tài)分配IP地址。這樣其就不能作為識(shí)別手段了。
  • HTTP代理和網(wǎng)關(guān)通常會(huì)打開一些新的到原始服務(wù)器的TCP連接,web服務(wù)器看到的將是代理服務(wù)器的IP地址,而不是客戶端的。

3.用戶登錄

如果服務(wù)器希望在為用戶提供對(duì)站點(diǎn)的訪問之前,先行登錄,可以向?yàn)g覽器回送一條401 Login Required。然后瀏覽器會(huì)顯示一個(gè)登錄對(duì)話框,并用Authorization首部在下一條對(duì)服務(wù)器的請(qǐng)求中提供這些信息。
但是這個(gè)方法的缺點(diǎn)在于,如果要訪問很多web站點(diǎn)時(shí),將是非常繁瑣的,可能每個(gè)站點(diǎn)對(duì)于密碼格式的要求都不一樣,因此要記住很多密碼,對(duì)于每天要訪問很多web站點(diǎn)的人來說,這是非常頭疼的一件事。

4.Cookie

Cookie是當(dāng)前識(shí)別用戶。實(shí)現(xiàn)持久會(huì)話的最好方式。

Cookie是如何工作的

用戶首次訪問web站點(diǎn)時(shí),web服務(wù)器對(duì)用戶一無所知。web服務(wù)器希望這個(gè)用戶會(huì)再次回來,所以想給這個(gè)用戶加上一個(gè)獨(dú)有的Cookie。這樣以后它就可以識(shí)別出這個(gè)用戶了。Cookie中包含一個(gè)由名值對(duì)這樣的信息構(gòu)成的任意列表,并通過Set-Cookie或Set-Cookie2HTTP響應(yīng)首部將其貼到用戶身上。


Cookie工作原理.png

瀏覽器會(huì)記住從服務(wù)器返回的Set-Cookie或Set-Cookie2首部中的Cookie內(nèi)容,并將Cookie集存儲(chǔ)在瀏覽器的Cookie數(shù)據(jù)庫中。將來用戶返回同一站點(diǎn)時(shí),瀏覽器會(huì)挑中那個(gè)服務(wù)器貼到用戶上的那些Cookie,并在一個(gè)Cookie請(qǐng)求首部中將其傳回去。

版本0的Set-Cookie首部

Set-Cookie首部有一個(gè)強(qiáng)制性的cookie名和cookie值。后面跟著可選的cookie屬性,中間由;隔開。

Set-Cookie屬性 描述及實(shí)例
NAME=VALUE 強(qiáng)制的,例:id="adcdef"
Expires 可選的。這個(gè)屬性會(huì)指定一個(gè)日期字符串,用來定義Cookie的實(shí)際生存期,一旦到了過期日期,就不再存儲(chǔ)或發(fā)布咋合格cookie了。eg:Set-Cookie:foo=bar;expires=Wednesday,09-Nov-99 23:12:40 GMT
Domain 可選的。服務(wù)器發(fā)送這個(gè)字段的意思是告訴瀏覽器只向這個(gè)域指定的服務(wù)器發(fā)送cookie,而不是向所有的服務(wù)器發(fā)送Cookie,如果沒有指定的域,就默認(rèn)為產(chǎn)生Set-Cookie響應(yīng)的服務(wù)器的主機(jī)名。eg:Set-Cookie:foo=bar;domain=@“joes-hardware.com
path 可選的。通過這個(gè)屬性可以為服務(wù)器上特定的文檔分配Cookie。eg:foo=bar;path=/orders
Secure 可選的。如果包含了這個(gè)屬性,則只有在HTTP使用SSL時(shí)才會(huì)發(fā)送cookie。eg:Set-Cookie:foo=bar;secure
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容