本地存儲(chǔ) cookie&&storage

本地存儲(chǔ)

數(shù)據(jù)在客戶端(瀏覽器)保存的方案

cookie

客戶端存儲(chǔ)數(shù)據(jù)的一種方式脂矫,該數(shù)據(jù)會(huì)隨著請(qǐng)求一起發(fā)送給服務(wù)端

? 是按照域和path來分別進(jìn)行存儲(chǔ)的,當(dāng)前域和當(dāng)前路徑只能操作當(dāng)前域/路徑或其子域/子路徑下的cookie,

一個(gè)域下可以設(shè)置多個(gè)cookie,每個(gè)cookie可以包含:key,value,expires/max-age,path,domain等屬性,

一個(gè)域下的cookie個(gè)數(shù)是有限制的,不同瀏覽器不同版本限制的個(gè)數(shù)不一樣,大概幾十個(gè),

一個(gè)cookie中保存的內(nèi)容也是有大小限制的犀忱,不同瀏覽器不同版本限制的大小不一樣,大概4000-8000個(gè)字符之間.

我們可以通過頭信息來傳輸cookie數(shù)據(jù)

? 請(qǐng)求:瀏覽器發(fā)送一個(gè)請(qǐng)求的時(shí)候扶关,會(huì)主動(dòng)的把和該請(qǐng)求同源下cookie通過請(qǐng)求頭一起發(fā)送給服務(wù)端

? 響應(yīng):服務(wù)器也可以通過響應(yīng)頭阴汇,把cookie數(shù)據(jù)發(fā)送給客戶端,如果客戶端是瀏覽器节槐,那么瀏覽器會(huì)主動(dòng)的讀取到響應(yīng)頭中的cookie數(shù)據(jù)搀庶,并保存在瀏覽器本地

我們還可以通過js來操作cookie數(shù)據(jù),需要注意的是铜异,如果cookie是httpOnly的話哥倔,那么這個(gè)cookie將不能被js操作,他只能用戶請(qǐng)求和響應(yīng)**

在document對(duì)象下有一個(gè)屬性:cookie揍庄,該屬性是可讀寫屬性

如果我們想通過js設(shè)置一個(gè)cookie咆蒿,那么就可以通過document.cookie來進(jìn)行設(shè)置,

document.cookie = 'value'

同一個(gè)源下可以存儲(chǔ)多個(gè)不同值的cookie,所以我們一般情況下會(huì)給每一個(gè)cookie起一個(gè)名字加以區(qū)分

document.cookie = "key = value"

cookie的選項(xiàng)
  • name: cookie名稱

  • value: cookie的值

  • domain:cookie所在的源(域),這個(gè)選項(xiàng)的設(shè)置需要注意一些問題,只能設(shè)置該域或該域的子域沃测,假設(shè)該腳本在baidu.com下的某個(gè)頁(yè)面中執(zhí)行缭黔,那么domain只能設(shè)置如下:domain=baidu.com或者domain=vip.baidu.com或者a.b.baidu.com,在讀取的時(shí)候,只能獲取到腳本所在域和其子域下的例如

    baike.baidu.com/a.html在這個(gè)頁(yè)面中我們通過去獲取cookie蒂破,只能獲取到baike.baidu.com以及他的子域下的cookie

  • path:路徑试浙,該選項(xiàng)和domain類似,也是用來設(shè)置某個(gè)cookie的存儲(chǔ)范圍寞蚌,但是他是使用path來設(shè)置,假設(shè)現(xiàn)在的域是baidu.com钠糊,那么如果path=/挟秤,就表示在baidu.com的所有路徑都可以訪問該cookie,如果path=/a抄伍,那么這個(gè)是baidu.com/a/ 下的頁(yè)面也能夠操作這個(gè)cookie艘刚,所以總的來說,cookie是按照域和路徑來分開存儲(chǔ)的

  • expires: 過期時(shí)間截珍,cookie默認(rèn)是臨時(shí)性存儲(chǔ)的攀甚,他的默認(rèn)存儲(chǔ)時(shí)間是:會(huì)話結(jié)束,關(guān)閉瀏覽器岗喉,自動(dòng)清除expires時(shí)間為session的cookie秋度,我們可以通過expires來設(shè)置一個(gè)cookie的過期(到期)時(shí)間,他的值一個(gè)日期格式的字符串钱床,該方式并不推薦使用荚斯,推薦使用 max-age:生命周期時(shí)間,存儲(chǔ)的時(shí)間(保質(zhì)期)查牌,單位:秒

//expires
var d = new Date();
d.setDate(d.getDate()+10)
document.cookie = 'username=aaa;expires=' + d.toGMTString();
//10天后到期清除cookie

//max-age
document.cookie = 'username=bbb;max-age=120';
//120秒后清除
讀取

document.cookie返回的是一個(gè)字符串事期,key=value的形式,多個(gè)cookie使用一個(gè)分號(hào)加空格來連接

document.cookie = 'uesername=aaa';
document.cookie = 'age=18';
console.log(document.cookie);
//本地瀏覽器有限制纸颜,需要在服務(wù)器里運(yùn)行才能查看
刪除

document.cookie = 'age=28;max-age=-1';

把生存時(shí)間變?yōu)?或者-1

storage

storage是H5新增的一個(gè)客戶端數(shù)據(jù)存儲(chǔ)方案兽泣,為了解決cookie會(huì)自動(dòng)傳輸?shù)膯栴},storage分為兩種:localStorage / sessionStorage

localStorage && sessionStorage 基本使用相同胁孙,適用同源策略

在window對(duì)象下有l(wèi)ocalStorage 唠倦,sessionStorage 其中兩個(gè)子對(duì)象,它們提供了

setItem(key,value)

將對(duì)應(yīng)的鍵值對(duì)存入到指定的Storage(localStorage或者sessionStorage)浊洞。如果已經(jīng)存在相同的key牵敷,則value會(huì)覆蓋原來的值

getItem(key)

拿到給定的key返回對(duì)應(yīng)的值的一種方式。

localStorage.setItem('name', 'motao'); //設(shè)置
localStorage.getItem('name') //獲取
removeItem(key)

移除key對(duì)應(yīng)的鍵值對(duì)法希。如果沒有key枷餐,則不執(zhí)行任何操作。

clear()

當(dāng)你不需要緩存或者需要將所有的緩存鍵值對(duì)重新設(shè)置時(shí)苫亦,調(diào)用對(duì)用的Storage對(duì)象毛肋。如:localStorage.clear()可以清楚本地緩存中的所有鍵值對(duì)兒怨咪。如果Storage對(duì)象本來就是空的,那么他不執(zhí)行任何操作润匙。

localStorage && sessionStorage區(qū)別

localStorage:永久保存(除了主動(dòng)刪除)诗眨;同源下的所有頁(yè)面都可以共享該數(shù)據(jù);支持一個(gè)事件:storage孕讳,他是一個(gè)廣播類型事件

sessionStorage:會(huì)話結(jié)束自動(dòng)刪除;只有當(dāng)前頁(yè)面才可以使用該數(shù)據(jù)

storage事件

當(dāng)同源頁(yè)面的某個(gè)頁(yè)面修改了localStorage,其余的同源頁(yè)面只要注冊(cè)了storage事件匠楚,就會(huì)觸發(fā)

假如我們有a,b 兩個(gè)界面,

網(wǎng)頁(yè)A:監(jiān)聽了storage事件:

<!DOCTYPE html>
<html>
<head lang="en">
    <title>A</title>
</head>
<body>
<script>
    window.addEventListener("storage", function (e) {
        alert(e.newValue);
    });
</script>
</body>
</html>

網(wǎng)頁(yè)B:修改了localStorage

<!DOCTYPE html>
<html>
<head lang="en">
    <title>B</title>
</head>
<body>
<script>
    localStorage.clear();
    localStorage.setItem('foo', 'bar');
</script>
</body>
</html>

運(yùn)行 : 將上面兩個(gè)網(wǎng)頁(yè)保存厂财,放到同一個(gè)服務(wù)器上芋簿,然后,先打開A.html璃饱,再打開B.html与斤。就會(huì)看到A.html會(huì)彈出提示框。注意兩個(gè)網(wǎng)頁(yè)要同源荚恶。

這樣就可以用storage做出不用請(qǐng)求http就可以傳遞數(shù)據(jù)的項(xiàng)目撩穿,例如,購(gòu)物車谒撼,當(dāng)用戶打開一個(gè)新頁(yè)面進(jìn)行購(gòu)物車添加食寡,就可以直接傳遞到最開始打開的頁(yè)面里的購(gòu)物車數(shù)字增長(zhǎng),

qq音樂的跨頁(yè)面嗤栓,添加歌曲到歌單冻河,就是用到了storage事件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茉帅,隨后出現(xiàn)的幾起案子叨叙,更是在濱河造成了極大的恐慌,老刑警劉巖堪澎,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擂错,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡樱蛤,警方通過查閱死者的電腦和手機(jī)钮呀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昨凡,“玉大人爽醋,你說我怎么就攤上這事”慵梗” “怎么了蚂四?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我遂赠,道長(zhǎng)久妆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任跷睦,我火速辦了婚禮筷弦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抑诸。我一直安慰自己烂琴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布蜕乡。 她就那樣靜靜地躺著监右,像睡著了一般。 火紅的嫁衣襯著肌膚如雪异希。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天绒瘦,我揣著相機(jī)與錄音称簿,去河邊找鬼。 笑死惰帽,一個(gè)胖子當(dāng)著我的面吹牛憨降,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播该酗,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼授药,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了呜魄?” 一聲冷哼從身側(cè)響起悔叽,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爵嗅,沒想到半個(gè)月后娇澎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睹晒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年趟庄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伪很。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戚啥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锉试,到底是詐尸還是另有隱情猫十,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站炫彩,受9級(jí)特大地震影響匾七,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜江兢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一昨忆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杉允,春花似錦邑贴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至改基,卻和暖如春繁疤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秕狰。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工稠腊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸣哀。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓架忌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親我衬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叹放,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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