cookies的產生是由於服務器端沒法維持狀態,服務器沒法區分兩個請求是否來自於同一個瀏覽器.
cookies是服務器添加保存在客戶端的一小塊數據,即瀏覽器存儲在用戶電腦上的文本文件.
(1).建立cookie
<1>.服務器接受到客戶端的請求後,在響應頭中添加一個Set-Cookie選項php
eg: HTTP/1.0 200 OK Content-type: text/html Set-Cookie: yummy_cookie=choco Set-Cookie: tasty_cookie=strawberry <2>.瀏覽器在收到響應後保存下cookie,以後的每次請求都會將cookie發送給服務器,另外,Cookie的過時時間、域、路徑、有效期、適用站點均可以根據須要來指定。 GET /sample_page.html HTTP/1.1 Host: www.example.org Cookie: yummy_cookie=choco; tasty_cookie=strawberry
(2).會話期cookiehtml
瀏覽器會話期存在,瀏覽器關閉後,cookie自動刪除,會話期間不須要設置過時時間(Expires)和有效期(Max-Age),有的瀏覽器提供會話恢復功能,即便關閉瀏覽器也會保留cookie.保存在內存中.
(3).持久性cookiejava
持久性cookie會設置過時時間或者有效期,保存在硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過時時間 eg:Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
(4).cookie中的secure和HttpOnly標記node
標記Secure須要經過https協議通道加密後發送給服務器,但由於Cookie有其固有的不安全性,Secure 標記也沒法提供確實的安全保障從 Chrome 52 和 Firefox 52 開始,不安全的站點(http:)沒法使用Cookie的 Secure 標記。 爲了不經過Document.cookie進行跨域腳本(XSS)攻擊,就要用HttpOnly標記 eg:Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
(5).domain選項segmentfault
指定了cookie將要被髮送到哪一個或者哪些域中,默認狀況下,會被設置爲建立該 cookie 的頁面所在的域名 eg: Set-Cookie: name=PHPSESSID; domain=segmentfault.com
(6).path選項跨域
path選項指定了哪些路徑能夠接受cookie,以/爲路徑會匹配其下的全部子路徑 eg:設置 Path=/docs,則如下地址都會匹配: /docs /docs/Web/ /docs/Web/HTTP
會話狀態管理(如用戶登陸狀態、購物車、遊戲分數或其它須要記錄的信息)
個性化設置(如用戶自定義設置、主題等)
瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等)瀏覽器
因爲cookie在客戶端的存儲大概是4k,過多的cookie會致使存儲空間不足,須要一個能存儲大量信息的倉庫.安全
他實質是存儲在客戶端的hash表
(1).設置服務器
eg: //三種設置字段的方式 f(!window.localStorage){ alert("瀏覽器支持localstorage"); return false; }else{ var storage=window.localStorage; //寫入a字段 storage["a"]=1; //寫入b字段 storage.a=1; //寫入c字段 storage.setItem("c",3); console.log(typeof storage["a"]); console.log(typeof storage["b"]); console.log(typeof storage["c"]); }
(2).讀取cookie
eg: //三種讀取方式 storage.a; storage.['b']; storage.getItem('c')
(3).刪除
<1>.刪除鍵值對
storage.removeItem(key);
<2>.清除全部
storage.clear();
cookie是存儲在客戶端的,很容易被篡改,這個時候就須要一種相對較安全的存儲方式,session應用而生.
是將信息存儲在服務器端的一種機制.當客戶端第一次訪問服務器時,會在服務器端生成一個session,當須要保存用戶數據的時候自動保存到服務器的session中
客戶端爲client,服務器爲server
(1).生成sessionId:當client第一次訪問server時,server會生成一段隨機數,即sessionID,將sessionID放在響應頭中,以cookie的形式返回給client,大概是這樣:cookie:sessionID=1234567.
(2).保存sessionId及用戶數據:server將用戶數據保存到sessionID下,再將sessionId保存到內存中.
(3).訪問session,當client再次訪問server時,client會帶上首次訪問server時得到的值爲sessionID的cookie,server在拿到cookie中的sessionID去內存中查找,若是找到就返回給client.
注意:
java,保存於服務器內存中,重啓服務器,session 消失
php,保存於服務器文件中,重啓服務器,session 依然存在
nodejs,保存於服務器內存中,重啓服務器,sessino 消失
1.cookie在存儲在客戶端,session在服務器端2.cookie在客戶端能夠查看和修改,session不能夠,session比cookie存儲更安全3.session的實現是基於sessionID,cookie中存有sessionID,因此,session是基於cookie的一種數據存儲方式