[JavaScript] Cookie,localStorage,sessionStorage概述
Cookie
Cookie 是一些数据, 存储于你电脑上的文本文件中,当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。Cookie 的作用就是存储 web 页面的用户信息
javascript 中使用 document.cookie 属性进行 cookie 的创建/读取/删除
//读取
allCookies = document.cookie;
//写入
document.cookie = newCookie;
//删除,设置 expires 参数为过期时间
document.cookie="hello=world; expires=Thu, 18 Dec 2043 12:00:00 GMT;"
Cookie 的属性值
- ;path=path (例如 '/', '/mydir') 如果没有定义,默认为当前文档位置的路径。
- ;domain=domain (例如 'example.com', 'subdomain.example.com') 如果没有定义,默认为当前文档位置的路径的域名部分。与早期规范相反的是,在域名前面加 . 符将会被忽视,因为浏览器也许会拒绝设置这样的 cookie。如果指定了一个域,那么子域也包含在内。
- ;max-age=max-age-in-seconds (例如一年为 606024*365)
- ;expires=date-in-GMTString-format 如果没有定义,cookie 会在对话结束时过期
这个值的格式参见 Date.toUTCString() - ;secure (cookie 只通过 https 协议传输)
cookie 的值字符串可以用 encodeURIComponent()来保证它不包含任何逗号、分号或空格(cookie 值中禁止使用这些值)
浏览器个数限制
- IE6 或更低版本最多 20 个 cookie
- IE7 和之后的版本最后可以有 50 个 cookie。
- Firefox 最多 50 个 cookie
- chrome 和 Safari 没有做硬性限制
Cookie 的缺点
Cookie
数量和长度的限制。每个 domain 最多只能有 20 条 cookie,每个 cookie 长度不能超过 4KB,否则会被截掉。- 安全性问题。如果 cookie 被人拦截了,那人就可以取得所有的 session 信息。即使加密也与事无补,因为拦截者并不需要知道 cookie 的意义,他只要原样转发 cookie 就可以达到目的了。
- 有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
Cookie 的安全问题
路径限制并不能阻止从其他路径访问 cookie. 使用简单的 DOM 即可轻易地绕过限制(比如创建一个指向限制路径的, 隐藏的 iframe, 然后访问其 contentDocument.cookie 属性). 保护 cookie 不被非法访问的唯一方法是将它放在另一个域名/子域名之下, 利用同源策略保护其不被读取. Web 应用程序通常使用 cookies 来标识用户身份及他们的登录会话. 因此通过窃听这些 cookie, 就可以劫持已登录用户的会话. 窃听的 cookie 的常见方法包括社会工程和 XSS 攻击.
解决安全问题的建议
- 通过良好的编程,控制保存在 cookie 中的 session 对象的大小。
- 通过加密和安全传输技术(SSL),减少 cookie 被破解的可能性。
- 只在 cookie 中存放不敏感数据,即使被盗也不会有重大损失。
- 控制 cookie 的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的 cookie。
localStorage 和 sessionStorage
- 返回值是一个 Storage 对象,可以添加、修改或删除存储的数据项
- 只在本地存储,localStorage 和 sessionStorage 的数据不会跟随 HTTP 请求一起发送到服务器,cookie 会发送
- 数据存储在 localStorage,它们都特定于页面的协议
- localStorage 和 sessionStorage 中的键值对总是以字符串的形式存储。 (键值对总是以字符串的形式存储,数值类型会自动转化为字符串类型)
- localStorage 和 sessionStorage 不能被爬虫抓取到
- 不同浏览器无法共享 localStorage 或 sessionStorage 中的信息
- 相同浏览器的不同页面间可以共享相同的 localStorage(同源策略),但是不同页面或标签页间无法共享 sessionStorage 的信息(多个 iframe 算是同源页面)
- 各浏览器支持的 localStorage 和 sessionStorage 容量上限不同,最低目前在 1m 以上support-test
localStorage 和 sessionStorage 不同
- localStorage 属性允许你访问一个 Document 源(origin)的对象 Storage,sessionStorage 属性允许你访问一个 session Storage 对象
- 存储在 sessionStorage 里面的数据在页面会话结束时会被清除(页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话),也就关闭浏览器会清除.localStorage 存储的数据能在跨浏览器会话保留,存储在 localStorage 的数据可以长期保留
localStorage 和 sessionStorage 方法
- key() 该方法接受一个数值 n 作为参数,并返回存储中的第 n 个键名(Storage 的方法)
- setItem(key,data) 该方法接受一个键名作为参数,返回键名对应的值
- getItem(key) 该方法接受一个键名和值作为参数,将会把键值对添加到存储中,如果键名存在,则更新其对应的值
- removeItem(key) 该方法接受一个键名作为参数,并把该键名从存储中删除
- clear() 调用该方法会清空存储中的所有键名
sessionStorage 的使用(localStorage 差不多)
function initSession() {
sessionStorage.clear();
}
function getSession(name) {
if (sessionStorage.getItem(name)) {
return JSON.parse(sessionStorage.getItem(name));
}
}
function setSession(name, data) {
var store = sessionStorage.getItem(name);
if (store) {
console.warn(name + "=>数据在sessionStorage已存在,执行替换操作");
sessionStorage.removeItem(name);
}
sessionStorage.setItem(name, JSON.stringify(data));
}
//sessionStorage 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据
export { initSession, getSession, setSession };
Docs
MDN - document.cookie
MDN - localStorage
MDN - sessionStorage
MDN - Storage
Cookies and Security
JavaScript Cookie
[JavaScript] Cookie,localStorage,sessionStorage概述的更多相关文章
- Cookie localStorage sessionStorage
三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 可设置失效时间,默认是关闭浏览器后失效 除非被清除,否则永久保存 仅在当前会话下(tab标签页)有 ...
- 大家都能看得懂的源码 - 如何封装 cookie/localStorage/sessionStorage hook?
本文是深入浅出 ahooks 源码系列文章的第九篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 今天来看看 ahooks 是怎么封装 cookie/localSt ...
- cookie, localStorage, sessionStorage区别
cookie 有过期时间,默认是关闭浏览器后失效,4K,兼容ie6,不可跨域,子域名会继承父域名的cookielocalStorage 永不过期,除非手动删除,5M,兼容IE8,不可跨域,子域名不能继 ...
- 封装cookie localStorage sessionStorage
var cookie = function(name, value, options) { if (typeof value !== 'undefined') { options = options ...
- H5新特性 本地存储---cookie localStorage sessionStorage
本地存储的作用 :避免登录网站时,用户在页面浏览时重复登录,也可以实现快速登录,一段时间内保存用户的登录效果,提高页面访问速率 在html5中提供三种数据持久化操作的方法: 1.cookie 可看作是 ...
- 本地存储cookie,localStorage,sessionStorage
常见的前端存储有老朋友 cookie,短暂的 sessionStorage,和简单强大的localStorage 他们之间的区别有以下几点 1.. cookie在浏览器和服务器间来回传递.而sessi ...
- Cookie, LocalStorage 与 SessionStorage
Cookie, LocalStorage 与 SessionStorage相同点 都是储存在用户本地的数据. 意义在于避免数据在浏览器和服务器间不必要地来回传递. 三者的特点 同属于html5 ...
- js中cookie,localStorage(sessionStorage)的存取
一.cookie (原生的不好用,自己简单封装) 1. 存cookie的方法: function setCookie(c_name,value,expiredays) { var exdate=new ...
- 详说 Cookie, LocalStorage 与 SessionStorage
本文最初发布于我的个人博客:咀嚼之味 最近在找暑期实习,其中百度.网易游戏.阿里的面试都问到一些关于HTML5的东西,问题大多是这样开头的:“你用过什么HTML5的技术呀?” 而后,每次都能扯到 Co ...
随机推荐
- NavigationView头部设置监听事件
直接写解决方法吧: 1.将XML里的静态引入删除: <android.support.design.widget.NavigationView android:id="@+id/nav ...
- java线程同步小结
1.线程同步的目的是为了防止多个线程同时访问一个资源时对资源的破坏 2.线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无 ...
- Brown Mood Median Test
Brown-Mood Median Test 对于两独立样本尺度中的位置参数(中位数)检验问题: \(H_0: med_x = med_y\) \(H_1=med_x > med_y\) 在 ...
- [Objective-C语言教程]简介(1)
中文名:扩充C的面向对象编程语言 外文名:Objective-C 简 写:ObjC&OC 创始人:布莱德·考克斯 创始时间:1980年代 Objective-C,通常写作ObjC或OC和较少用 ...
- 从壹开始前后端分离 39 || 想创建自己的dotnet模板么?看这里
缘起 开工是利啦!哈喽各位小伙伴,周三好呀,新的一年又开始了,老张给大家做个榜样,新的一年也要好好学习哟,这两天闲的无事就整理整理了这个系列的 Github 代码,增加了一个英文的 README ,然 ...
- 外网访问FTP出错200 Type set to A
打开IE浏览器,在intenet选项里的高级==> 这里没有勾就对了!
- ES6语法的学习与实践
ES6是JavaScript语言的新一代标准,是ECMAScript的第六个版本,加入了很多新的功能和语法,在很多框架,如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的,下面对经常 ...
- Kubernetes集群部署关键知识总结
Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...
- 第9章 设备授权端点(Device Authorization Endpoint) - IdentityModel 中文文档(v1.0.0)
OAuth 2.0设备流设备授权的客户端库是作为HttpClient扩展方法提供的. 以下代码发送设备授权请求: var client = new HttpClient(); var response ...
- solr的认识、linux下安装、java下使用(含下载资源)
目录 一.solr的大概认识 二.solr安装 三.solr的深度认识 四.solr的使用 (1)由于我们用到中文,所以需要中文分析器,这里我用IK Analyzer 2012FF_hf1 (2)同时 ...