cookie and storage
相同:
1.都是键对值方式存储
2.都有长短期两种存储方式
区别:
1.cookie:有长期和短期。默认为短期,即在浏览器关闭后消失。每次http请求都会附带cookie,所以cookie大小很重要。
指定格式:name=value; expires=xx; path=xx; domain=xx; secure (bool)
2.storage(session- , global-, local-),只有session是短期的,在会话后消失。存储在本地浏览器,不会随http发送。
剩下的都是保存到浏览器删除或者js删除。session不可以跨会话,可以跨越刷新。global可以跨会话,可以跨域(如果指定)。local可以跨会话,不可跨域。
********************************************************************************************
明天要面试。。紧张紧张> <
1.cookie
对于cookie的数量,一般浏览器是加以限制的。在同一个域名下,除了Safari和chrome不做限制,其他浏览器是30-50个左右。当cookie数量超出之后,浏览器会把旧的cookie移出,有些是清除最近最少,有些是随机清除。这样有点像操作系统中关于cache的替换机制。。。
对于cookie的大小,浏览器也是有加以限制的。一般一个域名下的cookie不超过4096B。
对cookie的数量和大小加以限制是因为cookie是随着http请求一起发送的,并且存储在本地。cookie过多,过大,会导致加载缓慢,系统运行负担加重等后果。
对cookie有这么几种设置:
1.key=value。键值的设置显然是必须的。只有他们会被发送,以下的几个值都是服务器发送给客户端,知道他们怎么处理cookie的。都是需要URL编码的。
2.域(domain)。指定cookie是放在什么域下的。
3.路径(path)。设定cookie是放在什么域中的路径下的,所以即使同域不同路径都是不能访问该内容的。
4.失效时间(expires)。不设置的话就是在浏览器关闭之后删除。如果设置,是一个GMT格式的时间
5.安全标志(secure)。不指定就没有,指定secure后,只有在SSL连接时才发送
对cookie的处理方式:
在js中通过document.cookie获取该页面下的所有可用cookie。但是这些cookie都是经过URL编码的,所以需要使用decodeURIComponent()来解码。
查询所需的cookie值时,肯定是根据相关的key值来寻找value值。但是由于cookie都经过编码了。。所以要把对应的key先通过encodeURIComponent()来编码,然后在所有的cookie中进行查询,在解码转回。
追加cookie的时候,把要写入的key=value编码后追加进document.cookie就好。
删除cookie的时候,找到指定的cookie,清空value值,把expire值设置成过去的时间就可以了。
2.Storage
为了让一些数据不用一直随http发送,也为了能跨会话(页面?)访问,就有了storage。
storage相对就好操作许多,主要方法:
clear():删除所有值(Firefox中没有)
removeItem(name):删除指定的storage
setItem(name, value):设定storage
getItem(name):获得指定的值
key(index):获得index处值的名字