Cookie,sessionStorage,localStorage

三者的异同点:

(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值,改为c
document.cookie='a=c'
// 删除name为a的cookie,将max-age设置为0,可以删除cookie
document.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取不到cookieEnd
			cookieValue = 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,不会覆盖原来的
	},
	// 通过设置过期时间删除cookie
	unset: 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值