浏览器存储机制
web存储:localstorage & sessionStorage的区别: 有效期和作用域,同时兼容当前所有主流浏览器
localstorage:
- 数据存储永久性永不过期: 除非刻意删除或者设置过期时间
- 作用域限定在文档源: 只有同源的文档才可共享localstorage数据,大小5M左右
- 作用域受浏览器供应商限制: 不同浏览器不可共享
sessionStorage:
- 有效期随窗口标签页的关闭而消失: sessionStorage存储的数据即被删除
- 作用域限定在文档源:不同浏览器不可共享sessionStorage数据,大小5M左右
- 同一浏览器不同窗口,无法共享:每次通过复制地址新打开的标签页即使同源都会重新初始化一个session,故无法共享。但是通过a链接或者window.open打开的新标签页之间共享sessionStorage(低版本的Chrome可以,高版本的及火狐还是会生成新的session,需要给a链接添加rel=“opener”属性即可)
存储API
1. localStorage.setItem('a', 1); 2. localStorage.getItem('a'); 3. localStorage.removeItem('a'); 4. 非IE8中,使用delete操作 5. localStorage.clear(); 清空全部 6. 枚举 for(var i = 0; i < localStorage.length; i++){ var name = localStorage.key(i); var value = localStorage.getItem(name); }
cookie
cookie在浏览器和服务器间来回传递
用户担心cookie的不安全性,可能会将浏览器的cookie禁用,可以通过navigator.cookieEnabled这个属性检测(true:cookie启用,flase:禁用)。
每个cookie的有效期和作用域都需要通过字符串的形式读写document对象的cookie属性来指定
每个domain最多20条cookie,每条cookie长度不能超过4KB,否则会被截掉
- 有效期很短暂,随浏览器关闭而删除cookie文件。但与sessionStorage不同的是:cookie的有效期是整个浏览器进程而不是单个窗口
- 作用域是通过文档源和文档路径来确定的,默认情况下,cookie和创建他的web页面有关,并对该页面及其该页面同目录或者子目录的其他页面可见(http://www.baidu.com/catalog/index.html创建的cookie,在http://www.baidu.com/catalog/test.html和http://www.baidu.com/catalog/test/index.html是可见的)
document.cookie
cookie的跨域问题:
domain表示的是cookie所在的域,默认为请求的地址,如网址为www.study.com/study,那么domain默认为www.study.com。而跨域访问,如域A为t1.study.com,域B为t2.study.com,那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.study.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.study.com。
注意:一般在域名前是需要加一个"."的,如"domain=.study.com"
参数 | 描述 |
---|---|
name | |
value | |
domain | 子域 |
path | 一般设为/,表示该站点下所有页面都可以访问 |
expire | 过期时间,不设置则随浏览器关闭消失 |
httpOnly | 若开启,则脚本无法获取cookie |
secure | 若设置,则只允许https协议连接可以访问cookie |
IE User Data
IE8以前,web存储的替代方案