HTTP之Cookie&Session


Cookie

- 什么是cookie?

MDN是這樣說的:HTTP Cookie(也叫Web cookie或者瀏覽器Cookie)是服務器發送到用戶瀏覽器并保存在瀏覽器上的一塊數據,它會在瀏覽器下一次發起請求時被攜帶并發送到服務器上。


- 設置cookie
  1. 服務器通過在響應頭里添加一個 Set-Cookie的字符串創造cookie,其格式如下(中括號中的部分是可選的):
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]

注意:value部分通常是name=value 格式的字符串,這一項必須填。

  1. 當瀏覽器在收到的響應報文看到含有Set-Cookie這個字段以后,這個cookie值就會在隨后的每次請求中被發送至服務器,cookie值被存儲在名為 Cookie 的 HTTP 請求頭中,并且只包含了 cookie 的值,忽略全部設置選項。例如:
Cookie: value

注意:這里只有value會發給服務器,在Set-cookie里的可選設置選項只會在瀏覽器端使用,不會發回給服務器。如果有多個value,可以用逗號隔開,例如:

Cookie: value1; value2; name1=value1

- expires

expires指定Cookie的有效期,它的選項的值是一個 GMT 日期格式的值,例如:

Set-Cookie: name=chiang; expires=Tue, 20 Jun 2017 07:17:37 GMT

如果我們沒有設置expires屬性,cookie 的生命周期僅限于當前會話中,關閉瀏覽器意味著這次會話的結束,所以會話 cookie 僅存在于瀏覽器打開狀態之下。如果expires屬性的值是一個過去的時間,那么cookie將會被瀏覽器立即刪除。


- domain

指定了 cookie 將要被發送至哪個或哪些域中。默認情況下,domain 會被設置為創建該 cookie 的頁面所在的域名,
domin屬性將指定作為Cookie適用對象的域名,即cookie將會被發送至哪個或者哪些域名中。默認為為創建Cookie的頁面所在域名。
domain屬性可以擴充 cookie 可發送域的數量,例如

Set-Cookie: name=chiang; domain=chiang.com

這里我們把domain設置為chiang.com,那么如果我們從a.chiang.com、b.chiang.com發送請求,就可以將該 cookie 的值發送至所有這些站點。因為瀏覽器會把 domain 的值與請求的域名做一個尾部比較(即從字符串的尾部開始比較),并將匹配的 cookie 發送至服務器。
注意:domain值必須是發送 Set-Cookie 消息頭的主機名的一部分,因為這會產生安全問題。不合法的 domain 選擇將直接被忽略。


- path

path屬性指定了請求的資源 URL 中必須存在指定的路徑時才會發送Cookie 消息頭。默認為當前發送Set-cookie請求所對應URL的path部分。

Set-Cookie:name=chiang;path=/blog

在這個例子中,path 選項值會與 /blog,/blogxxx 等等相匹配;任何以 /blog 開頭的選項都是合法的。
注意:只有在 domain 匹配完畢之后才會對 path 屬性進行比較。


- source

source屬性只是一個標記而沒有值。只有當一個請求通過 SSL 或 HTTPS 創建時,包含 secure 選項的 cookie 才能被發送至服務器。

Set-Cookie:name=chiang;path=/blog

默認情況下,在 HTTPS 鏈接上傳輸的 cookie 都會被自動添加上 secure 選項。


- cookie 自動刪除

cookie 會被瀏覽器自動刪除的情況:

  1. 會話 cookie (Session cookie) 在會話結束時(瀏覽器關閉)會被刪除
  1. 持久化 cookie(Persistent cookie)在到達失效日期時會被刪除
  2. 如果瀏覽器中的 cookie 數量達到限制,那么 cookie 會被刪除以為新建的 cookie 創建空間。

-HTTP-Only cookies

HTTP-Only 的意思是告訴瀏覽器這個 cookie 絕不能通過 JavaScript 的 document.cookie 屬性訪問。這個屬性是為了幫助阻止通過 JavaScript 發起的跨站腳本攻擊 (XSS) 竊取 cookie 的行為。
要創建一個 HTTP-Only cookie,只要在 cookie 中添加一個 HTTP-Only 標記即可:

Set-Cookie: name=chiang; HttpOnly

Session

- 什么是session

維基百科關于session的解釋:

在計算機科學領域來說,尤其是在網絡領域,會話session)是一種持久網絡協議,在用戶(或用戶代理)端和服務器端之間創建關聯,從而起到交換數據包的作用機制,session在網絡協議(例如telnetFTP)中是非常重要的部分。

- 通過cookie來管理session

由于HTTP是無狀態協議,也就以為著它無法實現狀態管理,例如登陸認證成功的用戶狀態無法在協議層面保存下來。當該用戶下一次繼續訪問就無法區分他與其他的用戶。于是我們使用Cookie 來管理Session,以彌補HTTP 協議中不存在的狀態管理功能。
步驟:

  1. 客戶端把用戶ID和密碼等登錄信息通過請求報文發送給服務器
  2. 服務器收到請求后,給該用戶標記Session ID(如PHPSESSID=048z9j…,為了防止這個ID被盜用,最好將其設置成難以推測的字符串,保證安全),記錄其認證狀態。然后將這個Session ID寫入響應頭的Set-cookie。
  3. 客戶端在接收到從服務器端發來的Session ID 后,會將其作為Cookie 保存在本地。下次向服務器發送同樣的請求時,瀏覽器會自動發送帶有Session ID的Cookie,服務器端可通過驗證接收到的Session ID 識別用戶和其認證狀態。

以上是一個登錄認證的session示例,通過這個例子我們可以了解session的基本原理,其實session可以理解為是服務器對cookie的一個映射。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,048評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,414評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,169評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,722評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,465評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,823評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,813評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,000評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,554評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,295評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,513評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,722評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,125評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,430評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,237評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,482評論 2 379

推薦閱讀更多精彩內容