JS-數(shù)據(jù)存儲(chǔ)-cookie

用途:在客戶(hù)端的磁盤(pán)上以很小的文件保存一定量的數(shù)據(jù)士复。

  • cookie的內(nèi)容
    document.cookie='name=值;[expires=失效時(shí)間;
    path=路徑訪(fǎng)問(wèn);domain=域名訪(fǎng)問(wèn);secure=安全的https限制通信]'
    上面的代碼是設(shè)置cookie的格式秦驯,cookie是document的屬性锻霎,可以通過(guò)為其賦值的形式設(shè)置cookie值护昧。[]內(nèi)的名值對(duì)兒是可選屬性坚踩。
  • 名稱(chēng)
    一個(gè)唯一確定的cookie名稱(chēng)呈础,必須經(jīng)過(guò)URL編碼。

  • 是名稱(chēng)對(duì)應(yīng)的值渊胸,必須被URL編碼
    document.cookie='user='+encodeURIComponent('杜杜');
    同xml一樣旬盯,需要對(duì)中文字符進(jìn)行編碼。
  • 失效時(shí)間
    表示cookie何時(shí)應(yīng)該被刪除的時(shí)間戳。表示在這個(gè)時(shí)間范圍內(nèi)胖翰,每次訪(fǎng)問(wèn)該網(wǎng)站都會(huì)向該網(wǎng)站的服務(wù)器發(fā)送這個(gè)已經(jīng)保存在本地的cookie值接剩,但是如果這個(gè)日期是以前的日期,那么該cookie值就會(huì)被刪除萨咳。
    var date=new Date();
    date.setDate(date.getDate()+7);
    document.cookie='user='+encodeURIComponent('杜杜')+';expires='+date.toGMTString();
    //已經(jīng)寫(xiě)入磁盤(pán)啦
  • 路徑
    只有訪(fǎng)問(wèn)在服務(wù)器內(nèi)指定的那個(gè)路徑下的文件時(shí)懊缺,才會(huì)向該文件發(fā)送cookie,否則訪(fǎng)問(wèn)其他路徑下的文件培他,就不會(huì)向其發(fā)送該cookie鹃两。
    點(diǎn)開(kāi)大圖,這是hao123網(wǎng)站cookie的信息舀凛,發(fā)現(xiàn)基本上路徑都是與該網(wǎng)頁(yè)在一個(gè)路徑下的怔毛。當(dāng)然,如果設(shè)置了其他的路徑腾降,那么該網(wǎng)頁(yè)就訪(fǎng)問(wèn)不了他設(shè)置的cookie信息。


    2015-02-07_205628.jpg

  • 默認(rèn)不設(shè)置時(shí)碎绎,該值就是請(qǐng)求所在域螃壤,如果domain設(shè)置成了該域名的二級(jí)子域下,那么不僅其他子域名訪(fǎng)問(wèn)不到該cookie筋帖,連一級(jí)域名也無(wú)法訪(fǎng)問(wèn)奸晴。
  • 安全標(biāo)志
    document.cookie='user='+encodeURIComponent('杜杜')+';secure';
    一旦設(shè)置了安全標(biāo)志,那么cookie只有在使用SSl時(shí)日麸,才發(fā)送到服務(wù)器寄啼。
  • 封裝cookie
    var cookieUtil={
    set :function(name,value,expires,path,domain,secure){
    var cookieText=encodeURIComponent(name)+'='+
    encodeURIComponent(value);
    if(expires instanceof Date){
    cookieText+=';expires='+expires.toGMTString();
    }
    if(path){
    cookieText+=';path='+path;
    }
    if(domain){
    cookieText+=';domain='+domain;
    }
    if(secure){
    cookieText+=';secure';
    }
    document.cookie=cookieText;
    },
    get:function(name){
    var cookieName=encodeURIComponent(name)+'=',
    cookieStart=document.cookie.indexOf(cookieName),
    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;
    },
    unset:function(name,path,domain,secure){
    this.set(name,'',new Date(0),domain,path)
    }
    }
    function setCookieDate(day){
    var date=null;
    if(typeof day=='number'&&day>0){
    date=new Date();
    date.setDate(date.getDate()+day);
    }else{
    throw new Error('!!')
    }
    return date;
    }
    cookieUtil.set('name','杜杜',setCookieDate(7));
    cookieUtil.set('user','lala',setCookieDate(7));
    cookieUtil.set('email','126.com',setCookieDate(7));
    這個(gè)封裝,將設(shè)置cookie代箭,讀取cookie墩划,消除cookie都封裝在一個(gè)對(duì)象里。
    特點(diǎn):
    1嗡综、在設(shè)置cookie值時(shí)乙帮,需要判斷失效時(shí)間expires,不僅要判斷他是否為空极景,而且還要判斷他是否是Date類(lèi)型的實(shí)例察净。
    2、取得cookie值時(shí)盼樟,是根據(jù)傳遞的cookie名稱(chēng)來(lái)得出該名稱(chēng)對(duì)應(yīng)的值氢卡。
    上例子設(shè)立了三個(gè)名值對(duì),打印cookie信息時(shí)晨缴,出現(xiàn)的是一個(gè)組合的字符串译秦,
    2015-02-07_212333.jpg

    所以當(dāng)采用get方式,來(lái)獲取信息時(shí),需要傳遞某個(gè)名稱(chēng)來(lái)查找對(duì)應(yīng)的信息诀浪。
    alert(cookieUtil.get('name'))//杜杜
    3棋返、讀取cookie值時(shí),需要熟練的使用字符串的方法雷猪。
  • cookie限制
  • 每個(gè)域的cookie總數(shù)是有限的睛竣,IE6以及更低版本限制每個(gè)域名最多20個(gè),然后其他瀏覽器都相對(duì)多一點(diǎn)求摇,但是為了兼容性考慮射沟,也就得限制在20多個(gè)啦。
  • 每個(gè)cookie的長(zhǎng)度限制在4095B以?xún)?nèi)与境。
  • 由于cookie是存在客戶(hù)端計(jì)算機(jī)上的验夯,所以安全性不太高。
  • IE5中的用戶(hù)數(shù)據(jù)
    考慮到這款瀏覽器的市場(chǎng)份額摔刁,所以挥转,我就忽略啦
  • HTML5中web存儲(chǔ)機(jī)制
    首先需要了解一下Storage類(lèi)型,該類(lèi)型提供最大的存儲(chǔ)空間來(lái)存儲(chǔ)名值對(duì)兒共屈,該類(lèi)型為所有他的實(shí)例定義了如下方法:
    clear():刪除所有值绑谣;但是火狐沒(méi)有實(shí)現(xiàn)。
    getItem(name):根據(jù)制定的名字name獲取對(duì)應(yīng)的值拗引。
    key(index):獲得index位置處的值的名字借宵。
    removeItem(name):刪除由name制定的名值對(duì)。
    setItem(name,value):為制定的name設(shè)置一個(gè)對(duì)應(yīng)的值矾削。
    還可以通過(guò)delete操作符進(jìn)行刪除某個(gè)名值對(duì)壤玫。(webkit不支持)
    還可以使用length屬性來(lái)判斷有多少名值對(duì)。
    【然后呢】該類(lèi)型實(shí)例的對(duì)象哼凯,可以進(jìn)行存儲(chǔ)數(shù)據(jù)欲间。IE8+,F(xiàn)F3.5+,chrome4+,Opera 10.5+
  • sessionStorage該對(duì)象是Storage的一個(gè)實(shí)例断部,存儲(chǔ)特定于某個(gè)會(huì)話(huà)的數(shù)據(jù)括改,也就是只保存到瀏覽器關(guān)閉。該對(duì)象可以跨越頁(yè)面刷新而存在家坎,同時(shí)嘱能,如果瀏覽器支持,瀏覽器崩潰后重啟依然可用(IE不支持)虱疏。
    存儲(chǔ)在sessionStorage中的數(shù)據(jù)只能由最初給對(duì)象存儲(chǔ)數(shù)據(jù)的頁(yè)面訪(fǎng)問(wèn)惹骂,所以對(duì)于多頁(yè)面應(yīng)用有限制。
    從兼容的角度考慮做瞪,只介紹大多數(shù)瀏覽器都支持的方法对粪。
    • 存儲(chǔ)數(shù)據(jù)
      sessionStorage.setItem('name','dudu');//使用方法存儲(chǔ)數(shù)據(jù),推薦
      sessionStorage.name='dudu';//使用屬性存儲(chǔ)數(shù)據(jù)
    • 讀取數(shù)據(jù)
      var name=sessionStorage.getItem('name');
      var name=sessionStorage.name;
    • 刪除數(shù)據(jù)
      sessionStorage.removeItem('name');
    • 迭代 sessionStorage中的值
      第一種方法利用length屬性以及key()方法
      第二種方法使用for in 循環(huán)
      【總結(jié)】這個(gè)方法是適合小段數(shù)據(jù)存儲(chǔ)右冻,且無(wú)法跨越會(huì)話(huà)存儲(chǔ)數(shù)據(jù)。
  • globalStorage該對(duì)象不是是Storage的實(shí)例著拭,但是當(dāng)為該對(duì)象指定域名使才是Storage的實(shí)例纱扭。
    可以通過(guò)location.host來(lái)作為域名,比較安全儡遮。
    例如
    globalStorage[location.host]
    這樣指定域名(子域名訪(fǎng)問(wèn)無(wú)效)后乳蛾,就具備了Storage的實(shí)例的全部特征。該對(duì)象是用來(lái)跨會(huì)話(huà)存儲(chǔ)數(shù)據(jù)的鄙币。如果不使用removeItem()或者delete來(lái)刪除肃叶,或者用戶(hù)未清除瀏覽器緩存,存儲(chǔ)在該對(duì)象屬性中的數(shù)據(jù)會(huì)一直保存在磁盤(pán)上十嘿,所以非常適合客戶(hù)端存儲(chǔ)文檔因惭,或者長(zhǎng)期保存用戶(hù)偏好。
    但是正是由于該對(duì)象需要額外指定域名所以比較麻煩绩衷,所以在修訂過(guò)的html5規(guī)范中用localStorage取代了globalStorage蹦魔。
  • localStorage該對(duì)象的設(shè)置讀取以及刪除數(shù)據(jù)的方式與sessionStorage一致。
    為了兼容只支持globalStorage的瀏覽器咳燕,可以使用以下函數(shù)
    function getLoacalStorage(){
    if(typeof localStorage=='object'){
    return localStorage;
    }else if(typeof globalStrage=='object'){
    return globalStorage[location.host];
    }else{
    throw new Error('local storage not available')
    }
    }
    var storage=getLoacalStorage();
    當(dāng)然勿决,任何方法都是有限制的,一般來(lái)說(shuō)對(duì)存儲(chǔ)空間大小的限制一般都是以每個(gè)來(lái)源(協(xié)議迟郎、域。端口)為單位的聪蘸。每個(gè)來(lái)源都有固定大小的空間用于保存自己的數(shù)據(jù)宪肖,考慮到這個(gè)限制,就要注意分析健爬,和控制每個(gè)來(lái)源有多少頁(yè)面需要保存數(shù)據(jù)控乾。“2.5MB”
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娜遵,一起剝皮案震驚了整個(gè)濱河市蜕衡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌设拟,老刑警劉巖慨仿,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纳胧,居然都是意外死亡镰吆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)跑慕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)万皿,“玉大人,你說(shuō)我怎么就攤上這事√垂欤” “怎么了剥啤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)减余。 經(jīng)常有香客問(wèn)我综苔,道長(zhǎng),這世上最難降的妖魔是什么佳励? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任休里,我火速辦了婚禮,結(jié)果婚禮上赃承,老公的妹妹穿的比我還像新娘妙黍。我一直安慰自己,他們只是感情好瞧剖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布拭嫁。 她就那樣靜靜地躺著,像睡著了一般抓于。 火紅的嫁衣襯著肌膚如雪做粤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天捉撮,我揣著相機(jī)與錄音怕品,去河邊找鬼。 笑死巾遭,一個(gè)胖子當(dāng)著我的面吹牛肉康,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灼舍,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吼和,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了骑素?” 一聲冷哼從身側(cè)響起炫乓,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎献丑,沒(méi)想到半個(gè)月后末捣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡创橄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年塔粒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐摘。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卒茬,死狀恐怖船老,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圃酵,我是刑警寧澤柳畔,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站郭赐,受9級(jí)特大地震影響薪韩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捌锭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一俘陷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧观谦,春花似錦拉盾、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至泻红,卻和暖如春夭禽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谊路。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工讹躯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缠劝。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓潮梯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剩彬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酷麦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 什么是 Cookie “cookie 是存儲(chǔ)于訪(fǎng)問(wèn)者的計(jì)算機(jī)中的變量矿卑。每當(dāng)同一臺(tái)計(jì)算機(jī)通過(guò)瀏覽器請(qǐng)求某個(gè)頁(yè)面時(shí)喉恋,就...
    恩德_b0c2閱讀 403評(píng)論 0 3
  • 前端開(kāi)發(fā)面試知識(shí)點(diǎn)大綱: HTML&CSS: 對(duì)Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異母廷、兼容性轻黑、hack、CSS基本功:...
    秀才JaneBook閱讀 2,341評(píng)論 0 25
  • 作者:晚晴幽草軒www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饑人谷_Dylan閱讀 1,224評(píng)論 0 51
  • Web Storage規(guī)范 是HTML5的一部分 目的:克服由cookie帶來(lái)的一些限制,當(dāng)數(shù)據(jù)需要被嚴(yán)格的控制在...
    放風(fēng)箏的小小馬閱讀 2,204評(píng)論 0 6
  • 本文介紹本地?cái)?shù)據(jù)存儲(chǔ)的選型业舍。簡(jiǎn)單總結(jié)一些查詢(xún)到的關(guān)于本地?cái)?shù)據(jù)存儲(chǔ)的技術(shù)抖拦。 控制臺(tái)展示前端存儲(chǔ) Chrome: 前端...
    謝大見(jiàn)閱讀 9,057評(píng)論 1 8