Cookie,sessionStorage,localStorage

来源:互联网 发布:软件无线电原理与应用 编辑:程序博客网 时间:2024/05/22 15:41

三者的异同点:

(1)三者都是保存在浏览器端,且同源的。
(2)cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
(3)cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
(4)存储大小限制也不同。cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 对存储空间大小的限制是以每个来源(协议、域和端口)为单位的,大多数桌面浏览器会设置每个来源5MB的限制,手机版一般是2.5MB。
(5)数据有效期不同。sessionStorage仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
(6)作用域不同。sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 和cookie在所有同源窗口中都是共享的。
(7)Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage的api接口使用更方便。
(8)sessionStorage和localStorage都是Storage类型的一个实例,都可以使用Storage上的方法,有:getItem(name),setItem(name,value),removeItem(name),key(index),clear()。clear方法Firefox没有实现。

1. cookie

document.cookie是一个小型文本文件,大小约4KB

由键值对组成,由分号+空格进行分隔。

虽然cookie存储在浏览器端,但是大部分时候我们是在服务器端对其进行设置,我们可以在http返回体(Response Headers)里面通过设置Set-Cookie这个头部来告诉浏览器端要存储的cookie。

想要唯一标定一个cookie值,需要name、domain、path的组合

// 在谷歌的控制台运行代码document.cookie();// 分别在163.com和music.163.com下运行得到:// "usertrack=ZUcIhldBah6+iStRCF0AAg==; ...(省略); s_n_f_l_n3=ba0f0bb7ac7c39371473901661964"// "usertrack=ZUcIhldBah6+iStRCF0AAg==; ...(省略); s_n_f_l_n3=ba0f0bb7ac7c39371473901661964; ...(省略)"// 可以发现music.163.com下运行得到的cookie集合包含163.com下得到的。在路径都为根目录时,父域的cookie在子域有效
// 将'a=b'添加到cookie集合中,不会覆盖原来的。document.cookie='a=b'// 修改name为a的value值,改为cdocument.cookie='a=c'// 删除name为a的cookie,将max-age设置为0,可以删除cookiedocument.cookie="a=''; max-age=0"

参考

// cookie的读取、写入、删除操作封装(来自js高级程序设计),网易笔试题var CookieUtil = {// 方法根据cookie的name取value值get: function(name){var cookieName = encodeURIComponent(name) + '=',cookieStart = document.cookie.indexOf(cookieName),cookieValue = null;if(cookieStart > -1){var cookieEnd = document.cookie.indexOf(";", cookieStart);//用字符串的indexOf方法查询if(cookieEnd == -1){//表明这个cookie是最后一对cookieEnd = document.cookie.length;}//substring取不到cookieEndcookieValue = decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length, cookieEnd));}return cookieValue;//只返回value值},set: function(name, value, expires, path, domain, secure){var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);// 判断expires是不是Date对象的实例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;//添加cookie,不会覆盖原来的},// 通过设置过期时间删除cookieunset: function (name, path, domain, secure){this.set(name, "", new Date(0), path, domain, secure);}}

2. 遍历web Storgge

// sessionStorage遍历for(var i=0, len=sessionStorage.length; i<len; i++){<span style="white-space:pre"></span>var key = sessionStorage.key(i);<span style="white-space:pre"></span>var value = sessionStorage.getItem(key);<span style="white-space:pre"></span>alert(key + '=' + value);}// localStorage遍历for(var i=0, len=localStorage.length; i<len; i++){<span style="white-space:pre"></span>var key = localStorage.key(i);<span style="white-space:pre"></span>var value = localStorage.getItem(key);<span style="white-space:pre"></span>alert(key + '=' + value);}



0 0
原创粉丝点击