欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS中cookie的使用及缺點講解

 更新時間:2017年05月13日 07:43:20   作者:浮生小夢  
Cookie就是這樣的一種機制。它可以彌補HTTP協(xié)議無狀態(tài)的不足。在Session出現(xiàn)之前,基本上所有的網(wǎng)站都采用Cookie來跟蹤會話。下面通過本文給大家介紹JS中cookie的使用及缺點,需要的朋友參考下吧

 什么是Cookie

Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社區(qū)發(fā)展的一種機制。目前Cookie已經(jīng)成為標準,所有的主流瀏覽器如IE、Netscape、Firefox、Opera等都支持Cookie。

由于HTTP是一種無狀態(tài)的協(xié)議,服務(wù)器單從網(wǎng)絡(luò)連接上無從知道客戶身份。怎么辦呢?就給客戶端們頒發(fā)一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證。這樣服務(wù)器就能從通行證上確認客戶身份了。這就是Cookie的工作原理。

Cookie實際上是一小段的文本信息??蛻舳苏埱蠓?wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個Cookie??蛻舳藶g覽器會把Cookie保存起來。當瀏覽器再請求該網(wǎng)站時,瀏覽器把請求的網(wǎng)址連同該Cookie一同提交給服務(wù)器。服務(wù)器檢查該Cookie,以此來辨認用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。

 Cookie機制

在程序中,會話跟蹤是很重要的事情。理論上,一個用戶的所有請求操作都應(yīng)該屬于同一個會話,而另一個用戶的所有請求操作則應(yīng)該屬于另一個會話,二者不能混淆。例如,用戶A在超市購買的任何商品都應(yīng)該放在A的購物車內(nèi),不論是用戶A什么時間購買的,這都是屬于同一個會話的,不能放入用戶B或用戶C的購物車內(nèi),這不屬于同一個會話。

而Web應(yīng)用程序是使用HTTP協(xié)議傳輸數(shù)據(jù)的。HTTP協(xié)議是無狀態(tài)的協(xié)議。一旦數(shù)據(jù)交換完畢,客戶端與服務(wù)器端的連接就會關(guān)閉,再次交換數(shù)據(jù)需要建立新的連接。這就意味著服務(wù)器無法從連接上跟蹤會話。即用戶A購買了一件商品放入購物車內(nèi),當再次購買商品時服務(wù)器已經(jīng)無法判斷該購買行為是屬于用戶A的會話還是用戶B的會話了。要跟蹤該會話,必須引入一種機制。

Cookie就是這樣的一種機制。它可以彌補HTTP協(xié)議無狀態(tài)的不足。在Session出現(xiàn)之前,基本上所有的網(wǎng)站都采用Cookie來跟蹤會話。

JS設(shè)置cookie:

假設(shè)在A頁面中要保存變量username的值("jack")到cookie中,key值為name,則相應(yīng)的JS代碼為:

 document.cookie="name="+username;

在cookie 的名或值中不能使用分號(;)、逗號(,)、等號(=)以及空格。在cookie的名中做到這點很容易,但要保存的值是不確定的。如何來存儲這些值呢?方 法是用escape()函數(shù)進行編碼,它能將一些特殊符號使用十六進制表示,例如空格將會編碼為“20%”,從而可以存儲于cookie值中,而且使用此 種方案還可以避免中文亂碼的出現(xiàn)。

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

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

JS讀取cookie:

假設(shè)cookie中存儲的內(nèi)容為: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"));
//如果需要設(shè)定自定義過期時間
//那么把上面的setCookie 函數(shù)換成下面兩個函數(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è)定過期時間的使用示例:
//s20是代表20秒
//h是指小時,如12小時則是:h12
//d是天數(shù),30天則:d30
setCookie("name","hayden","s20");

Cookie缺點

cookie雖然在持久保存客戶端數(shù)據(jù)提供了方便,分擔了服務(wù)器存儲的負擔,但還是有很多局限性的。

第一:每個特定的域名下最多生成20個cookie

1.IE6或更低版本最多20個cookie

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

3.Firefox最多50個cookie

4.chrome和Safari沒有做硬性限制

IE和Opera 會清理近期最少使用的cookie,F(xiàn)irefox會隨機清理cookie。

cookie的最大大約為4096字節(jié),為了兼容性,一般不能超過4095字節(jié)。

IE 提供了一種存儲可以持久化用戶數(shù)據(jù),叫做uerData,從IE5.0就開始支持。每個數(shù)據(jù)最多128K,每個域名下最多1M。這個持久化數(shù)據(jù)放在緩存中,如果緩存沒有清理,那么會一直存在。

優(yōu)點:極高的擴展性和可用性

1.通過良好的編程,控制保存在cookie中的session對象的大小。

2.通過加密和安全傳輸技術(shù)(SSL),減少cookie被破解的可能性。

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

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

缺點:

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

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

3.有些狀態(tài)不可能保存在客戶端。例如,為了防止重復(fù)提交表單,我們需要在服務(wù)器端保存一個計數(shù)器。如果我們把這個計數(shù)器保存在客戶端,那么它起不到任何作用。

以上所述是小編給大家介紹的JS中cookie的使用及缺點講解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • javascript實現(xiàn)數(shù)組扁平化六種技巧總結(jié)

    javascript實現(xiàn)數(shù)組扁平化六種技巧總結(jié)

    這篇文章主要為大家詳細介紹了六種javascript中實現(xiàn)數(shù)組扁平化的技巧,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2023-12-12
  • Javascript中return的使用與閉包詳解

    Javascript中return的使用與閉包詳解

    Javascript中return與閉包對大家來說應(yīng)該都不陌生,下面本文就給大家介紹了Javascript中return的使用與閉包。文中給出了詳細的示例代碼,對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,感興趣的朋友們下面來一起看看吧。
    2017-01-01
  • 原生JavaScript實現(xiàn)動態(tài)省市縣三級聯(lián)動下拉框菜單實例代碼

    原生JavaScript實現(xiàn)動態(tài)省市縣三級聯(lián)動下拉框菜單實例代碼

    像平時購物選擇地址時一樣,通過選擇的省動態(tài)加載城市列表,通過選擇的城市動態(tài)加載縣區(qū)列表,從而可以實現(xiàn)省市縣的三級聯(lián)動,下面使用原生的JavaScript來實現(xiàn)這個功能,需要的朋友參考下吧
    2016-02-02
  • js隨機生成26個大小寫字母

    js隨機生成26個大小寫字母

    這篇文章主要為大家詳細介紹了javascript隨機生成26個大小寫字母,感興趣的朋友可以參考一下
    2016-02-02
  • JS實現(xiàn)點擊Radio動態(tài)更新table數(shù)據(jù)

    JS實現(xiàn)點擊Radio動態(tài)更新table數(shù)據(jù)

    這篇文章主要介紹了JS實現(xiàn)點擊Radio動態(tài)更新table數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 詳解如何準確判斷JavaScript中的數(shù)據(jù)類型

    詳解如何準確判斷JavaScript中的數(shù)據(jù)類型

    JavaScript中,我們經(jīng)常需要判斷數(shù)據(jù)類型以便于正確地處理數(shù)據(jù),本文將介紹JavaScript中的數(shù)據(jù)類型判斷技術(shù),包括typeof操作符、instanceof操作符、Object.prototype.toString方法以及ES6新增的一些數(shù)據(jù)類型判斷方法,需要的朋友可以參考下
    2023-08-08
  • JS 實現(xiàn)雙色表格實現(xiàn)代碼

    JS 實現(xiàn)雙色表格實現(xiàn)代碼

    通過為<tr>元素添加屬性或類型選擇器,再通過CSS設(shè)置可以實現(xiàn)雙色表格,但如果表格很長,逐個元素添加可真麻煩。而且這樣的代碼維護起來不容易。所以比較好的方式是用JS實現(xiàn)。
    2009-11-11
  • 原生js實現(xiàn)淘寶放大鏡效果

    原生js實現(xiàn)淘寶放大鏡效果

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)放大鏡效果,制作一個類似于淘寶的放大鏡效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • JS與jQuery遍歷Table所有單元格內(nèi)容的方法

    JS與jQuery遍歷Table所有單元格內(nèi)容的方法

    這篇文章主要介紹了JS與jQuery遍歷Table所有單元格內(nèi)容的方法,結(jié)合實例形式分別描述了JavaScript與jQuery實現(xiàn)遍歷table單元格的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • javascript DIV實現(xiàn)跟隨鼠標移動

    javascript DIV實現(xiàn)跟隨鼠標移動

    這篇文章主要為大家詳細介紹了javascript DIV跟隨鼠標移動,有一個div跟隨鼠標移動的結(jié)果,有一連串跟隨鼠標移動的效果,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論