什么是Cookie
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開(kāi)發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,成都app軟件開(kāi)發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。創(chuàng)新互聯(lián)深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社區(qū)發(fā)展的一種機(jī)制。目前Cookie已經(jīng)成為標(biāo)準(zhǔn),所有的主流瀏覽器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一種無(wú)狀態(tài)的協(xié)議, 在cookie 的名或值中不能使用分號(hào)(;)、逗號(hào)(,)、等號(hào)(=)以及空格。在cookie的名中做到這點(diǎn)很容易,但要保存的值是不確定的。如何來(lái)存儲(chǔ)這些值呢?方 法是用escape()函數(shù)進(jìn)行編碼,它能將一些特殊符號(hào)使用十六進(jìn)制表示,例如空格將會(huì)編碼為“20%”,從而可以存儲(chǔ)于cookie值中,而且使用此 種方案還可以避免中文亂碼的出現(xiàn)。 當(dāng)使用escape()編碼后,在取出值以后需要使用unescape()進(jìn)行解碼才能得到原來(lái)的cookie值, JS讀取cookie: 假設(shè)cookie中存儲(chǔ)的內(nèi)容為: 則在B頁(yè)面中獲取變量username的值的JS代碼如下: 讀取cookies Cookie缺點(diǎn) cookie雖然在持久保存客戶端數(shù)據(jù)提供了方便,分擔(dān)了服務(wù)器存儲(chǔ)的負(fù)擔(dān),但還是有很多局限性的。 第一:每個(gè)特定的域名下最多生成20個(gè)cookie 1.IE6或更低版本最多20個(gè)cookie 2.IE7和之后的版本最后可以有50個(gè)cookie。 3.Firefox最多50個(gè)cookie 4.chrome和Safari沒(méi)有做硬性限制 IE和Opera 會(huì)清理近期最少使用的cookie,F(xiàn)irefox會(huì)隨機(jī)清理cookie。 cookie的最大大約為4096字節(jié),為了兼容性,一般不能超過(guò)4095字節(jié)。 IE 提供了一種存儲(chǔ)可以持久化用戶數(shù)據(jù),叫做uerData,從IE5.0就開(kāi)始支持。每個(gè)數(shù)據(jù)最多128K,每個(gè)域名下最多1M。這個(gè)持久化數(shù)據(jù)放在緩存中,如果緩存沒(méi)有清理,那么會(huì)一直存在。 優(yōu)點(diǎn):極高的擴(kuò)展性和可用性 1.通過(guò)良好的編程,控制保存在cookie中的session對(duì)象的大小。 2.通過(guò)加密和安全傳輸技術(shù)(SSL),減少cookie被破解的可能性。 3.只在cookie中存放不敏感數(shù)據(jù),即使被盜也不會(huì)有重大損失。 4.控制cookie的生命期,使之不會(huì)永遠(yuǎn)有效。偷盜者很可能拿到一個(gè)過(guò)期的cookie。 缺點(diǎn): 1.`Cookie`數(shù)量和長(zhǎng)度的限制。每個(gè)domain最多只能有20條cookie,每個(gè)cookie長(zhǎng)度不能超過(guò)4KB,否則會(huì)被截掉。 2.安全性問(wèn)題。如果cookie被人攔截了,那人就可以取得所有的session信息。即使加密也與事無(wú)補(bǔ),因?yàn)閿r截者并不需要知道cookie的意義,他只要原樣轉(zhuǎn)發(fā)cookie就可以達(dá)到目的了。 3.有些狀態(tài)不可能保存在客戶端。例如,為了防止重復(fù)提交表單,我們需要在服務(wù)器端保存一個(gè)計(jì)數(shù)器。如果我們把這個(gè)計(jì)數(shù)器保存在客戶端,那么它起不到任何作用。 以上所述是小編給大家介紹的JS中cookie的使用及缺點(diǎn)講解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的! document.cookie="name="+username;
document.cookie="str="+escape("I love ajax");
// document.cookie="str=I%20love%20ajax";
name=jack;password=123
var username=document.cookie.split(";")[0].split("=")[1];
//JS操作cookies方法!
//寫(xiě)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();
}
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"));
//如果需要設(shè)定自定義過(guò)期時(shí)間
//那么把上面的setCookie 函數(shù)換成下面兩個(gè)函數(shù)就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;
}
}
//這是有設(shè)定過(guò)期時(shí)間的使用示例:
//s20是代表20秒
//h是指小時(shí),如12小時(shí)則是:h22
//d是天數(shù),30天則:d30
setCookie("name","hayden","s20");
分享名稱:JS中cookie的使用及缺點(diǎn)講解
當(dāng)前路徑:http://weahome.cn/article/jcocjs.html