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 值中禁止使用这些值)

浏览器个数限制

  1. IE6 或更低版本最多 20 个 cookie
  2. IE7 和之后的版本最后可以有 50 个 cookie。
  3. Firefox 最多 50 个 cookie
  4. chrome 和 Safari 没有做硬性限制

Cookie 的缺点

  1. Cookie数量和长度的限制。每个 domain 最多只能有 20 条 cookie,每个 cookie 长度不能超过 4KB,否则会被截掉。
  2. 安全性问题。如果 cookie 被人拦截了,那人就可以取得所有的 session 信息。即使加密也与事无补,因为拦截者并不需要知道 cookie 的意义,他只要原样转发 cookie 就可以达到目的了。
  3. 有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

Cookie 的安全问题

路径限制并不能阻止从其他路径访问 cookie. 使用简单的 DOM 即可轻易地绕过限制(比如创建一个指向限制路径的, 隐藏的 iframe, 然后访问其 contentDocument.cookie 属性). 保护 cookie 不被非法访问的唯一方法是将它放在另一个域名/子域名之下, 利用同源策略保护其不被读取. Web 应用程序通常使用 cookies 来标识用户身份及他们的登录会话. 因此通过窃听这些 cookie, 就可以劫持已登录用户的会话. 窃听的 cookie 的常见方法包括社会工程和 XSS 攻击.

解决安全问题的建议

  1. 通过良好的编程,控制保存在 cookie 中的 session 对象的大小。
  2. 通过加密和安全传输技术(SSL),减少 cookie 被破解的可能性。
  3. 只在 cookie 中存放不敏感数据,即使被盗也不会有重大损失。
  4. 控制 cookie 的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的 cookie。

localStorage 和 sessionStorage

  1. 返回值是一个 Storage 对象,可以添加、修改或删除存储的数据项
  2. 只在本地存储,localStorage 和 sessionStorage 的数据不会跟随 HTTP 请求一起发送到服务器,cookie 会发送
  3. 数据存储在 localStorage,它们都特定于页面的协议
  4. localStorage 和 sessionStorage 中的键值对总是以字符串的形式存储。 (键值对总是以字符串的形式存储,数值类型会自动转化为字符串类型)
  5. localStorage 和 sessionStorage 不能被爬虫抓取到
  6. 不同浏览器无法共享 localStorage 或 sessionStorage 中的信息
  7. 相同浏览器的不同页面间可以共享相同的 localStorage(同源策略),但是不同页面或标签页间无法共享 sessionStorage 的信息(多个 iframe 算是同源页面)
  8. 各浏览器支持的 localStorage 和 sessionStorage 容量上限不同,最低目前在 1m 以上support-test

localStorage 和 sessionStorage 不同

  1. localStorage 属性允许你访问一个 Document 源(origin)的对象 Storage,sessionStorage 属性允许你访问一个 session Storage 对象
  2. 存储在 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概述的更多相关文章

  1. Cookie localStorage sessionStorage

    三者的异同 特性 Cookie localStorage sessionStorage 数据的生命期 可设置失效时间,默认是关闭浏览器后失效 除非被清除,否则永久保存 仅在当前会话下(tab标签页)有 ...

  2. 大家都能看得懂的源码 - 如何封装 cookie/localStorage/sessionStorage hook?

    本文是深入浅出 ahooks 源码系列文章的第九篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 今天来看看 ahooks 是怎么封装 cookie/localSt ...

  3. cookie, localStorage, sessionStorage区别

    cookie 有过期时间,默认是关闭浏览器后失效,4K,兼容ie6,不可跨域,子域名会继承父域名的cookielocalStorage 永不过期,除非手动删除,5M,兼容IE8,不可跨域,子域名不能继 ...

  4. 封装cookie localStorage sessionStorage

    var cookie = function(name, value, options) { if (typeof value !== 'undefined') { options = options ...

  5. H5新特性 本地存储---cookie localStorage sessionStorage

    本地存储的作用 :避免登录网站时,用户在页面浏览时重复登录,也可以实现快速登录,一段时间内保存用户的登录效果,提高页面访问速率 在html5中提供三种数据持久化操作的方法: 1.cookie 可看作是 ...

  6. 本地存储cookie,localStorage,sessionStorage

    常见的前端存储有老朋友 cookie,短暂的 sessionStorage,和简单强大的localStorage 他们之间的区别有以下几点 1.. cookie在浏览器和服务器间来回传递.而sessi ...

  7. Cookie, LocalStorage 与 SessionStorage

    Cookie, LocalStorage 与 SessionStorage相同点 都是储存在用户本地的数据. 意义在于避免数据在浏览器和服务器间不必要地来回传递. 三者的特点     同属于html5 ...

  8. js中cookie,localStorage(sessionStorage)的存取

    一.cookie (原生的不好用,自己简单封装) 1. 存cookie的方法: function setCookie(c_name,value,expiredays) { var exdate=new ...

  9. 详说 Cookie, LocalStorage 与 SessionStorage

    本文最初发布于我的个人博客:咀嚼之味 最近在找暑期实习,其中百度.网易游戏.阿里的面试都问到一些关于HTML5的东西,问题大多是这样开头的:“你用过什么HTML5的技术呀?” 而后,每次都能扯到 Co ...

随机推荐

  1. java web 在线聊天的基本实现

    随着互联网的发展,http的协议有些时候不能满足需求,比如在现聊天的实现.如果使用http协议必须轮训,或者使用长链接.必须要一个request,这样后台才能发送信息到前端. 后台不能主动找客户端通信 ...

  2. supervisord supervisorctl 问题supervisor.sock refused connection

    如果supervisord挂了的话,提示supervisor.sock refused connection. ,重新启动命令为supervisord 常用命令: supervisord -c /et ...

  3. Mysql8.0命令

    1.创建用户 create user 'username'@'localhost' identified by 'pwd' 2.修改访问权限 在mysql数据下修改user表用户host为'%' up ...

  4. 使用Java实现二叉树的添加,删除,获取以及遍历

    一段来自百度百科的对二叉树的解释: 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用 ...

  5. 从壹开始微服务 [ DDD ] 之终篇 ║当事件溯源 遇上 粉丝活动

    回首 哈喽~大家好,时间过的真快,关于DDD领域驱动设计的讲解基本就差不多了,本来想着周四再开一篇,感觉没有太多的内容了,剩下的一个就是验证的问题,就和之前的JWT很类似,就不打开一个章节了,而且这个 ...

  6. springcloud情操陶冶-springcloud config server(三)

    承接前文springcloud情操陶冶-springcloud config server(二),本文就不讲述server了,就简单阐述下client的应用 前话 config server在引入的时 ...

  7. ArcPy 将mxd格式转换为msd格式

    在控制程序进行地图服务更新时,如果只是修改MXD中的渲染是不行的,需要写脚本将MXD转换为MSD,替换原有的MSD文件,并重新启动地图服务,这样才能读取到新的渲染方式. 附上Python代码: # - ...

  8. 读懂 Gradle 的 DSL

    现在 Android 开发免不了要和 Gradle 打交道,所有的 Android 开发肯定都知道这么在 build.gradle 中添加依赖,或者添加配置批量打包,但是真正理解这些脚本的人恐怕很少. ...

  9. 在Salesforce成长:需要好奇心

    今天的正题,今天谈谈好奇心和技术.这两天北大学霸Cherry分两次问了我两个问题,都触发了很好的结果和思考,让大家都受益. 第一天是她在做Salesforce和Flexible Report集成项目中 ...

  10. sql语句 汉字转拼音首字母

    (1)------------------------------------------------------------------------------------------------- ...