Cookie

cookie也叫HTTP Cookie,最初是客戶端與服務(wù)器端進(jìn)行會(huì)話使用的。比如,會(huì)員登錄,下次回訪網(wǎng)站時(shí)無須登錄了;或者是購物車,購買的商品沒有及時(shí)付款,過兩天發(fā)現(xiàn)購物車?yán)镞€有之前的商品列表。

HTTP Cookie要求服務(wù)器對(duì)任意HTTP請(qǐng)求發(fā)送Set-Cookie,因此,Cookie的處理原則上需要在服務(wù)器環(huán)境下進(jìn)行。當(dāng)然,現(xiàn)在大部分瀏覽器在客戶端也能實(shí)現(xiàn)Cookie的生成和獲取。(目前Chrome不可以在客戶端操作,其他瀏覽器均可)



完整格式為:

name=value; [expires=date]; [path=path]; [domain=somewhere.com]; [secure]

中括號(hào)是可選,name=value是必選。


document.cookie = 'user=' + encodeURIComponent('冬哥');? //編碼寫入

alert(decodeURIComponent(document.cookie));? ? ? ? ? ? //解碼讀取

expires=date 失效時(shí)間,如果沒有聲明,則為瀏覽器關(guān)閉后即失效。聲明了失效時(shí)間,那么時(shí)間到期后方能失效。

PS:可以通過Firefox瀏覽器查看和驗(yàn)證失效時(shí)間。如果要提前刪除cookie也非常簡單,只要重新創(chuàng)建cookie把時(shí)間設(shè)置當(dāng)前時(shí)間之前即可:date.getDate() - 1或new Date(0)。

var date = new Date();? ? ? ? ? ? ? ? ? ? ? //創(chuàng)建一個(gè)

date.setDate(date.getDate() + 14);

document.cookie = "user= " + encodeURIComponent('冬哥') +";expires=" + date;


path=path 訪問路徑,當(dāng)設(shè)置了路徑,那么只有設(shè)置的那個(gè)路徑文件才可以訪問cookie。


var path = '/D:/%E5%86%AC%E5%93%A5/hhh';

document.cookie = "user= " + encodeURIComponent('冬哥') + ";path=" + path;


domain=domain 訪問域名,用于限制只有設(shè)置的域名才可以訪問,那么沒有設(shè)置,會(huì)默認(rèn)限制為創(chuàng)建cookie的域名。


var domain = 'www.520ly.com';

document.cookie = "user= " + encodeURIComponent('冬哥') + ";domain=" + domain;

PS:如果定義了www.520ly.com,那么在這個(gè)域名下的任何網(wǎng)頁都可訪問,如果定義了m.520ly.com,那么只能在這個(gè)二級(jí)域名訪問該cookie,而主域名和其他子域名則不能訪問。

PS:設(shè)置域名,必須在當(dāng)前域名綁定的服務(wù)器上設(shè)置,如果在520mg.com服務(wù)器上隨意設(shè)置其他域名,則會(huì)無法創(chuàng)建cookie。


secure 安全設(shè)置,指明必須通過安全的通信通道來傳輸(HTTPS)才能獲取cookie。

document.cookie = "user= " + encodeURIComponent('冬哥') + ";secure";

alert(encodeURIComponent('冬哥'));--------%E5%86%AC%E5%93%A5

alert(decodeURIComponent('%E5%86%AC%E5%93%A5'));-------冬哥


PS:https安全通信鏈接需要單獨(dú)配置。

JavaScript設(shè)置、讀取和刪除并不是特別的直觀方便,我們可以封裝成函數(shù)來方便調(diào)用。



創(chuàng)建cookie


function setCookie(name, value, expires, path, domain, secure) {

var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);

if (expires instanceof Date)? {

cookieText += '; expires=' + expires;

}

if (path) {

cookieText += '; expires=' + expires;

}

if (domain) {

cookieText += '; domain=' + domain;

}

if (secure) {

cookieText += '; secure';}

document.cookie = cookieText;

}

常見setcookie? ? name? value? exprises?

function setCookie(name, value, iDay)

{

var oDate=new Date();

oDate.setDate(oDate.getDate()+iDay);

document.cookie=name+'='+value+';expires='+oDate;

}

獲取cookie

方法一:

function getCookie(name) {

var cookieName = encodeURIComponent(name) + '=';

var cookieStart = document.cookie.indexOf(cookieName);

var cookieValue = null;

if (cookieStart > -1) {

var cookieEnd = document.cookie.indexOf(';', cookieStart);

if (cookieEnd == -1) {

cookieEnd = document.cookie.length;

}

cookieValue = decodeURIComponent(

document.cookie.substring(cookieStart + cookieName.length, cookieEnd));

}

return cookieValue;

}

方法二:


function getCookie(name) //獲取cookie

{

var arr=document.cookie.split('; ');

for(var i=0;i<arr.length;i++)

{

var arr2=arr[i].split('=');

if (arr2[0]==name)

{return arr2[1];}

}

return ' ';

}




刪除cookie

1.

function removeCookie(name) //刪除cookie

{

setCookie(name, 1, -1);

}

2.

function unsetCookie(name) {

document.cookie = name + "= ; expires=" + new Date(0);

}

失效天數(shù),直接傳一個(gè)天數(shù)即可

function setCookieDate(day) {

if (typeof day == 'number' && day > 0) {

var date = new Date();

date.setDate(date.getDate() + day);

} else {

throw new Error('傳遞的day必須是一個(gè)天數(shù),必須比0大');

}

return date;

}



突然就想上串代碼!

setCookie('userName', 'dongge', 365);

setCookie('password', '123456', 14);

alert(document.cookie);

輸出 userName=dongge; password=123456

removeCookie('userName');

alert(document.cookie);

輸出 password=123456;?


alert(getCookie("userName"));

輸出 dongge;

cookie局限性

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

第一:每個(gè)特定的域名下最多生成20個(gè)cookie(根據(jù)不同的瀏覽器有所區(qū)別)。

1.IE6或更低版本最多20個(gè)cookie

2.IE7和之后的版本最多可以50個(gè)cookie。IE7最初也只能20個(gè),之后因被升級(jí)不定后增加了。

3.Firefox最多50個(gè)cookie

4.Opera最多30個(gè)cookie

5.Safari和Chrome沒有做硬性限制。

PS:為了更好的兼容性,所以按照最低的要求來,也就是最多不得超過20個(gè)cookie。當(dāng)超過指定的 cookie時(shí),瀏覽器會(huì)清理掉早期的cookie。IE和Opera會(huì)清理近期最少使用的cookie,F(xiàn)irefox會(huì)隨機(jī)清理cookie。

第二:cookie的最大大約為4096字節(jié)(4k),為了更好的兼容性,一般不能超過4095字節(jié)即可。

第三:cookie存儲(chǔ)在客戶端的文本文件,所以特別重要和敏感的數(shù)據(jù)是不建議保存在cookie的。比如銀行卡號(hào),用戶密碼等。


Web存儲(chǔ)

在比較高版本的瀏覽器,JavaScript提供了sessionStorage和localStorage


通過方法存儲(chǔ)和獲取

localStorage.setItem('name', '曾慶林');

alert(localStorage.getItem('name'));

通過屬性存儲(chǔ)和獲取

localStorage.book = '曾慶林';

alert(localStorage.book);

刪除存儲(chǔ)

localStorage.removeItem('name');

PS:這三個(gè)對(duì)象都是永久保存的,保存在緩存里,只有手工刪除或者清理瀏覽器緩存方可失效。在容量上也有一些限制,主要看瀏覽器的差異

Firefox3+、IE8+、Opera為5M,,Chrome和Safari為2.5M

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,409評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,360評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,123評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,559評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,742評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評(píng)論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,981評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評(píng)論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,354評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,707評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容

  • 什么是 Cookie “cookie 是存儲(chǔ)于訪問者的計(jì)算機(jī)中的變量。每當(dāng)同一臺(tái)計(jì)算機(jī)通過瀏覽器請(qǐng)求某個(gè)頁面時(shí),就...
    恩德_b0c2閱讀 413評(píng)論 0 3
  • 用途:在客戶端的磁盤上以很小的文件保存一定量的數(shù)據(jù)。 cookie的內(nèi)容document.cookie='name...
    Miss____Du閱讀 6,794評(píng)論 1 10
  • 作者:晚晴幽草軒www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饑人谷_Dylan閱讀 1,227評(píng)論 0 51
  • 背景在HTTP協(xié)議的定義中,采用了一種機(jī)制來記錄客戶端和服務(wù)器端交互的信息,這種機(jī)制被稱為cookie,cooki...
    時(shí)芥藍(lán)閱讀 2,375評(píng)論 1 17
  • Cookie的使用 Cookie簡介:Cookie,有時(shí)也用其復(fù)數(shù)形式 Cookies,指某些網(wǎng)站為了辨別用戶身份...
    尤樊容閱讀 1,621評(píng)論 0 4