一:cookie
Cookie
的作用是與伺服器進行互動,作為HTTP
規範的一部分而存在
瞭解cookie
要表示唯一的一個
cookie
值需要:name
、domain
、path
一個
cookie
就是一個小型的文字檔案雖然
cookie
儲存在瀏覽器端,但是一般是在伺服器端設定的。可以在
HTTP
返回體裡,通過設定Set-Cookie
來告訴瀏覽器端所要儲存的cookie
。用來儲存客戶瀏覽器請求伺服器頁面的請求資訊
cookie相關欄位的說明
名稱:一個唯一確定
cookie
的名稱。cookie
名稱是不區分大小寫的。cookie
的名稱必須是經過URL
編碼的。值:儲存在
cookie
中的字串值。值必須被URL
編碼。域:
cookie
對於哪個域是有效的。所有向該域傳送的請求中都會包含這個cookie
資訊。如果沒有明確設定,那麼這個域會被認作來自設定cookie
的那個域。路徑:對於指定域中的那個路徑,應該向伺服器傳送
cookie
。例如,你可以指定cookie
只有從http://www.wrox.com/books/
中才能訪問,那麼http://www.wrox.com
的頁面就不會傳送cookie
資訊,即使請求都是來自同一個域的。失效時間:表示
cookie
何時應該被刪除的時間戳(也就是,何時應該停止向伺服器傳送這個cookie
)。預設情況下,瀏覽器會話結束時即將所有cookie
刪除;不過也可以自己設定刪除時間。這個值是個GMT
格式的日期(Wdy,DD-Mon-YYYY HH:MM:SSGMT
),用於指定應該刪除cookie
的準確時間。因此,cookie
可在瀏覽器關閉後依然儲存在使用者的機器上。如果你設定的失效日期是個以前的時間,則cookie
會被立刻刪除。安全標誌:指定後,
cookie
只有在使用SSL
連線的時候才傳送到伺服器。例如,cookie
資訊只能傳送給https://www.wrox.com
,而http://www.wrox.com
的請求則不能傳送cookie
。
cookie的應用場景
簡單來說,
Cookie
就是伺服器暫存放在你的電腦裡的資料(.txt
格式的文字檔案),好讓伺服器用來辨認你的計算機。當你在瀏覽網站的時候,Web
伺服器會先送一小小資料放在你的計算機上,Cookie
會把你在網站上所打的文字或是一些選擇都記錄下來。當下次你再訪問同一個網站,Web伺服器會先看看有沒有它上次留下的Cookie
資料,有的話,就會依據Cookie
裡的內容來判斷使用者,送出特定的網頁內容給你。網站可以利用
cookie
跟蹤統計使用者訪問該網站的習慣,比如什麼時間訪問,訪問了哪些頁面,在每個網頁的停留時間等。利用這些資訊,一方面是可以為使用者提供個性化的服務,另一方面,也可以作為了解所有使用者行為的工具,對於網站經營策略的改進有一定參考價值。目前
Cookie
最廣泛的是記錄使用者登入資訊,這樣下次訪問時可以不需要輸入自己的使用者名稱、密碼了——當然這種方便也存在使用者資訊洩密的問題,尤其在多個使用者共用一臺電腦時很容易出現這樣的問題。
設定/修改 cookie
cookie
的原生的API
,需要我們自己進行封裝
//直接複製 【直接複製不是覆蓋,而是追加】
document.cookie = 'name=value;'
//封裝setCookie方法
//setCookie 首先對name和value進行編碼
function setCookie(name,value,expires,path,domain,secure){
var cookie = encodeURIComponent(name)+ '=' +encodeURIComponent(value);
//注意分號後面要有空格
//後面的4個引數是可選的,所以用if判斷並追加
if(expires){
cookie +='; expires='+expires.toGMTString();
}
if(path){
cookie += '; path='+path;
}
if(domain){
cookie += '; domain='+domain;
}
if(secure){
cookie += '; secure='+secure;
}
document.cookie = cookie;
}
複製程式碼
刪除cookie
輸入引數為
name
、path
、domain
這3
個是唯一標識cookie
的,將max-age
設定為0,就可以立即刪除了.
function remove(name,domain,path){
document.cookie = 'name='+name
+'; domain='+domain
+'; path='+path
+'; max-age=0';
}
複製程式碼
cookie缺點
Cookie
數量和長度的限制。IE6
或更低版本每個domian
下最多20
個cookie
,IE7
和之後的版本最多可以有50
個cookie
,Firefox
最多50
個cookie
,chrome
和Safari
沒有做硬性限制,每個cookie
長度不能超過4KB
,否則會被截掉。IE
和Opera
會清理近期最少使用的cookie
,Firefox
會隨機清理cookie
。這就導致不能永久儲存資訊。安全性問題。如果
cookie
被人攔截了,那人就可以取得所有的session
資訊。即使加密也與事無補,因為攔截者並不需要知道cookie
的意義,他只要原樣轉發cookie
就可以達到目的了。並且每次你請求一個新的頁面的時候,
cookie
只要滿足作用域和作用路徑,Cookie
都會被髮送過去,這樣無形中浪費了頻寬。
二:本地儲存
Web Storage
是為了在本地“儲存”資料而生。html5
中的 Web Storage
包括了兩種儲存方式:sessionStorage
和localStorage
localStorage && sessionStorage:只要有效期和作用域,瀏覽器每次訪問的時候都會將Storage載入到記憶體裡。
localStorage
用於持久化的本地儲存,除非主動刪除資料,否則資料是永遠不會過期的。sessionStorage
用於本地儲存一個會話(session
)中的資料,這些資料只有在同一個會話中的頁面才能訪問並且當會話結束後資料也隨之銷燬。因此sessionStorage
不是一種持久化的本地儲存,僅僅是會話級別的儲存。也就是說只要這個瀏覽器視窗沒有關閉,即使重新整理頁面或進入同源另一頁面,資料仍然存在。關閉視窗後,sessionStorage
即被銷燬localStorage
也受同源策略的限制。localStorage
和sessionStorage
都具有相同的操作方法,如setItem
,getItem
,removeItem
,clear
等方法,不像cookie
需要前端開發者自己封裝setCookie
,getCookie
。
三:區別
1、cookie、session區別
- cookie 儲存於瀏覽器端,而 session 儲存於服務端
- cookie 的安全性相比於 session 較弱,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。 - session 會在一定時間內儲存在伺服器上。當訪問增多時,會佔用伺服器的資源,所以考慮到伺服器效能方面,可以使用cookie
- cookie 儲存容量有限制,單個cookie 儲存資料不能超過4k,且很多瀏覽器限制一個站點最多儲存20個cookie。而對於 session ,其預設大小一般是1024k
2、cookie、sessionStorage、localStorage 異同點
html5 中 webStorage 包含 sessionStorage 和 localStorage
共同點:
- 都儲存在瀏覽器端,且是同源的
區別:
- cookie 資料始終在同源的http請求中攜帶,而 webStorage 不會再請求中攜帶,僅僅在本地儲存
- 儲存大小區別,cookie 是4k,webStorage 可以達到5M甚至更大
- 資料有效時間區別: sessionStorage 僅僅是會話級別的儲存,它只在當前瀏覽器關閉前有效,不能持久保持;localStorage 始終有效,即使視窗或瀏覽器關閉也一直有效,除非使用者手動刪除,其才會失效;cookie 只在設定的 cookie 過期時間之前一直有效。
- 作用域區別:sessionStorage 不在不同的瀏覽器視窗中共享,即使是同一個頁面; localStorage 和 cookie 在所有同源視窗是共享的
- Web Storage 支援事件通知機制,可以將資料更新的通知傳送給監聽者。Web Storage 的 api 介面使用更方便。
3、web storage和cookie的區別
Web Storage的概念和cookie相似,區別是它是為了更大容量儲存設計的。Cookie的大小是受限的,並且每次你請求一個新的頁面的時候Cookie都會被髮送過去,這樣無形中浪費了頻寬,另外cookie還需要指定作用域,不可以跨域呼叫。
除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發者自己封裝setCookie,getCookie。
但是Cookie也是不可以或缺的:Cookie的作用是與伺服器進行互動,作為HTTP規範的一部分而存在 ,而Web Storage僅僅是為了在本地“儲存”資料而生。
Cookies:伺服器和客戶端都可以訪問;大小隻有4KB左右;有有效期,過期後將會刪除;
本地儲存:只有本地瀏覽器端可訪問資料,伺服器不能訪問本地儲存直到故意通過POST或者GET的通道傳送到伺服器;每個域5MB;沒有過期資料,它將保留知道使用者從瀏覽器清除或者使用Javascript程式碼移除。