首頁 >web前端 >js教程 >JS中cookie的使用方法及缺點介紹

JS中cookie的使用方法及缺點介紹

零下一度
零下一度原創
2017-05-16 09:35:071197瀏覽

Cookie就是這樣的一種機制。它可以彌補HTTP協定無狀態的不足。在Session出現之前,基本上所有的網站都採用Cookie來追蹤會話。以下透過本文為大家介紹JS中cookie的使用及缺點,需要的朋友參考下吧

# 什麼是Cookie

##Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社群發展的機制。目前Cookie已成為標準,所有的主流瀏覽器如IE、Netscape、Firefox、Opera等都支援Cookie。

由於HTTP是無狀態的協議,伺服器單從網路連線上無從知道客戶身分。怎麼辦呢?就給客戶端們頒發一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證。這樣伺服器就能從通行證上確認客戶身分了。這就是Cookie的工作原理。

Cookie其實是一小段的文字訊息。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再要求網站時,瀏覽器會把請求的網址連同該Cookie一同提交給伺服器。伺服器檢查該Cookie,以此來辨識用戶狀態。伺服器也可以根據需要修改Cookie的內容。

 Cookie機制

在程式中,會話追蹤是很重要的事情。理論上,一個使用者的所有請求操作都應該屬於同一個會話,而另一個使用者的所有請求操作則應該屬於另一個會話,二者不能混淆。例如,用戶A在超市購買的任何商品都應該放在A的購物車內,不論是用戶A什麼時間購買的,這都是屬於同一個會話的,不能放入用戶B或用戶C的購物車內,這不屬於同一個會話。

而Web應用程式是使用HTTP協定傳輸資料的。 HTTP協定是無狀態的協定。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線。這就意味著伺服器無法從連線上追蹤會話。即用戶A購買了一件商品放入購物車內,當再次購買商品時伺服器已經無法判斷該購買行為是屬於用戶A的會話還是用戶B的會話了。要追蹤該會話,必須引入一種機制。

Cookie就是這樣的一種機制。它可以彌補HTTP協定無狀態的不足。在Session出現之前,基本上所有的網站都採用Cookie來追蹤會話。

JS設定cookie:

假設在A頁面中要儲存

變數username的值("jack")到cookie中,key值為name,則對應的JS代碼為:

 document.cookie="name="+username;

在cookie 的名或值中不能使用分號(;)、逗號(,)、等號(=)以及空格。在cookie的名中做到這一點很容易,但要保存的值是不確定的。如何來儲存這些值呢?方法是用escape()

函數進行編碼,它能將一些特殊符號使用十六進位表示,例如空格將會編碼為“20%”,從而可以存儲在cookie值中,而且使用此種方案還可以避免中文亂碼的出現。

document.cookie="str="+escape("I love ajax"); 
// document.cookie="str=I%20love%20ajax";

當使用escape()編碼後,在取出值以後需要使用unescape()進行解碼才能得到原來的cookie值,

JS讀取cookie:

假設cookie中儲存的內容為:

name=jack;password=123

則在B頁面中取得變數username的值的JS程式碼如下:

var username=document.cookie.split(";")[0].split("=")[1];
//JS操作cookies方法!
//写cookies
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}

讀取cookies#

function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
删除cookies
function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null)
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
//使用示例
setCookie("name","hayden");
alert(getCookie("name"));
//如果需要设定自定义过期时间
//那么把上面的setCookie 函数换成下面两个函数就ok;
//程序代码
function setCookie(name,value,time)
{
var strsec = getsec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec*1);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getsec(str)
{
alert(str);
var str1=str.substring(1,str.length)*1;
var str2=str.substring(0,1);
if (str2=="s")
{
return str1*1000;
}
else if (str2=="h")
{
return str1*60*60*1000;
}
else if (str2=="d")
{
return str1*24*60*60*1000;
}
}
//这是有设定过期时间的使用示例:
//s20是代表20秒
//h是指小时,如12小时则是:h12
//d是天数,30天则:d30
setCookie("name","hayden","s20");

Cookie缺點

cookie雖然在持久保存客戶端資料提供了方便,分擔了伺服器儲存的負擔,但還是有很多限制的。

第一:每個特定的網域下最多產生20個cookie1.IE6或更低版本最多20個cookie

2.IE7和之後的版本最後可以有50個cookie。

3.Firefox最多50個cookie

4.chrome和Safari沒有做硬性限制######IE和Opera 會清理近期最少使用的cookie,Firefox會隨機清理cookie 。 ######cookie的最大約為4096字節,為了相容性,一般不能超過4095位元組。 ######IE 提供了一個儲存可以持久化使用者數據,叫做uerData,從IE5.0就開始支援。每個資料最多128K,每個網域下最多1M。這個持久化資料放在###快取###中,如果快取沒有清理,那麼就會一直存在。 ############優點:極高的擴展性和可用性#############1.透過良好的編程,控制保存在cookie中的session物件的大小。 ######2.透過加密和安全傳輸技術(SSL),減少cookie被破解的可能性。 ###

3.只在cookie中存放不敏感數據,即使被盜也不會有重大損失。

4.控制cookie的生命期,使之不會永遠有效。偷盜者很可能會拿到一個過期的cookie。

缺點:

1.`Cookie`數量和長度的限制。每個domain最多只能有20條cookie,每個cookie長度不能超過4KB,否則會被截掉。

2.安全性問題。如果cookie被人攔截了,那人就可以取得所有的session資訊。即使加密也與事無補,因為攔截者並不需要知道cookie的意義,他只要原樣轉發cookie就可以達到目的了。

3.有些狀態不可能保存在客戶端。例如,為了防止重複提交表單,我們需要在伺服器端保存一個計數器。如果我們把這個計數器保存在客戶端,那麼它就起不到任何作用。

【相關推薦】

1. 特別推薦「php程式設計師工具箱」V0.1版本下載

2. 免費js線上影片教學

3. php.cn獨孤九賤(3)-JavaScript影片教學

#

以上是JS中cookie的使用方法及缺點介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn