SessionStorage, LocalStorage, Cookie这三者都可以被用来在浏览器端存储数据,而且都是字符串类型的键值对!

区别在于前两者属于WebStorage,创建它们的目的便是存储客户端数据。要保存必须域名是同源的。
而Cookie早在网景公司的浏览器中就开始支持,最初目的是为了保持HTTP的状态。
LocalStorage和SessionStorage都是本地存储,不会被发送到服务器上。

1. cookie
cookie是存储在客户端的小型文本文件;

浏览器怎么设置 cookie, 控制台 document.cookie='a=1', 那么同个域名下的多个浏览器标签页都会共用这个 cookie,
比如 www.xxx.com/(A页) 和 www.xxx.com/?act=bbb(B页); 先同时打开这2个标签页, 在A页面document.cookie='a=1', 那么B页也带了这个 cookie;

若此时在A页 控制台 document.cookie='a=8', 不用刷新 B页, 控制台输入document.cookie 也有 'a=8'; 刷新 A页 还是有 'a=8'; 关闭 A页 和 B页, 但是不关闭浏览器, 再打开 A页, 还是有 'a=8'; 直到整个浏览器都关闭了, 就没有 'a=8';

所以如果在浏览器端生成Cookie,默认是关闭浏览器后失效。若想在关闭浏览器以后不失效,可以设置一个过期时间, 代码如下:

var exp = new Date();
// 30 秒后过期
exp.setTime(exp.getTime() + 30 * 1000);
document.cookie='a=1;expires=' + exp.toGMTString();

那么关闭浏览器再打开, 则'a'还在, 但是过了 30秒, 'a' 就变成 null.

2. sessionStorage

若先打开2个标签页, A页和B页, A页控制台输入 sessionStorage.setItem('a', 1), 注意此时B页 输入sessionStorage.getItem('a') 值为null, 但是此时若从A页 跳转到C页(C 和 B 是带同一个URL的 不同标签页), 只有 C页带 'a', B页还是不带'a', 此时刷新B页 还是不带 'a';

总结起来就是, 必须是从A页 跳转的或新打开的标签页会带 'a';
若A页带'a', 则新标签页再打开一个A页 也会带'a';
若A页带'a', 地址栏输入C页 会带'a';(有点像 A页跳转过去)
若A页和B页都带'a', 关闭 A标签页, 再打开 A标签页不带 'a', 这时必须从 B页带过去。

关闭浏览器则会清除 'a', 并且不能像 cookie 一样设置过期时间;

3. localStorage
localStorage 和 Cookie 的表现形式一样, 若先打开A 和B 标签页, A 页 localStorage.setItem('a', 1), 则B页 localStorage.getItem('a') 也有 'a';

localStorage 永远都不会被删除, 除非 调用了 localStorage.removeItem('a'); 或者清空所有item localStorage.clear();

总结:

3者的浏览器支持

特性

Chrome

Firefox (Gecko)

Internet Explorer

Opera

Safari (WebKit)

localStorage

4

3.5

8

10.50

4

sessionStorage

5

2

8

10.50

4

3者的不同

特性

Cookie

localStorage

sessionStorage

数据的生命期

一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效

除非被清除,否则永久保存

仅在当前会话下有效,关闭页面或浏览器后被清除

存放数据大小

4K左右

一般为5MB

与服务器端通信

每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题

仅在客户端(即浏览器)中保存,不参与和服务器的通信

易用性

需要程序员自己封装,源生的Cookie接口不友好

源生接口可以接受,亦可再次封装来对Object和Array有更好的支持

 

cookie 封装好的设置代码:

  1. var CookieUtil = {
  2. get: function (name){
  3. var cookieName = encodeURIComponent(name) + "=",
  4. cookieStart = document.cookie.indexOf(cookieName),
  5. cookieValue = null;
  6.  
  7. if (cookieStart > -1){
  8. var cookieEnd = document.cookie.indexOf(";", cookieStart)
  9. if (cookieEnd == -1){
  10. cookieEnd = document.cookie.length;
  11. }
  12. cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
  13. }
  14.  
  15. return cookieValue;
  16. },
  17.  
  18. set: function (name, value, expires, path, domain, secure) {
  19. var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
  20.  
  21. if (expires instanceof Date) {
  22. cookieText += "; expires=" + expires.toGMTString();
  23. }
  24.  
  25. if (path) {
  26. cookieText += "; path=" + path;
  27. }
  28.  
  29. if (domain) {
  30. cookieText += "; domain=" + domain;
  31. }
  32.  
  33. if (secure) {
  34. cookieText += "; secure";
  35. }
  36.  
  37. document.cookie = cookieText;
  38. },
  39.  
  40. unset: function (name, path, domain, secure){
  41. this.set(name, "", new Date(0), path, domain, secure);
  42. }
  43.  
  44. };

参考地址:

http://jerryzou.com/posts/cookie-and-web-storage/



客户端 localStorage, sessionStorage, cookie 的区别的更多相关文章

  1. localstorage sessionstorage cookie的区别

    一.基本概念 Cookie cookie比较小,大小限制在4kb左右,是网景公司的前雇员 LouMontulli 在1993年3月的发明.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记 ...

  2. cookie和session,sessionStorage、localStorage和cookie的区别

    1.cookie 含义: 存储在访问者的计算机中的变量,即存储在客户端 创建一个cookie /* getCookie方法判断document.cookie对象中是否存有cookie,若有则判断该co ...

  3. localStorage sessionStorage cookie indexedDB

    目录: localStorage sessionStorage cookie indexedDB localStorage localStorage存储的数据能在跨浏览器会话保留 数据可以长期保留,关 ...

  4. localStorage&sessionStorage&Cookie

    localStorage.sessionStorage.Cookie三者区别如下:

  5. localStorage,sessionStorage,cookie使用场景和区别

    localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...

  6. localStorage,sessionStorage,cookie区别

    localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...

  7. 本地存储 localStorage/sessionStorage/cookie

    cookie是个基础的东西.是服务器发送到客户端,存储在客户端的一小段数据.可以存储一些配置信息,客户标识信息等.用户下次访问这个网站时,会把上次网站发来的cookie一同发送回去.cookie保存在 ...

  8. localstorage sessionstorage cookie 备忘

    /* sessionStorage: 保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空: localStorage: 保存的数据长期存在,下一次访问该网站的时候,网页可以直接 ...

  9. Cookie、session和localStorage、以及sessionStorage之间的区别

    一.Cookie.session和localStorage的区别 cookie的内容主要包括:名字.值.过期时间.路径和域.路径与域一起构成cookie的作用范围.若不设置时间,则表示这个cookie ...

随机推荐

  1. 【BZOJ4821】【SDOI2017】相关分析 [线段树]

    相关分析 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Frank对天文学非常感兴趣,他经 ...

  2. 「6月雅礼集训 2017 Day4」暴力大神hxx

    [题目大意] 给出一个n重循环,每重循环有范围$[l, r]$,其中$l$,$r$可能是之前的变量,也可能是常数.求循环最底层被执行了多少次. 其中,保证每个循环的$l$,$r$最多有一个是之前的变量 ...

  3. windows+nexus+maven环境搭建(转)

    windows nexus环境搭建 1.下载nexus 版本为 nexus-2.11.4-01-bundle 下载地址 这里写链接内容 2.将下载好的文件放到D盘进行解压 3.解压后目录结构 nexu ...

  4. dump_stack 实现分析【转】

    转自:http://kernel.meizu.com/2017/03/18-40-19-dump_stack.html 1 简介 说起 dump_stack() ,相信从事 Linux 内核或者驱动相 ...

  5. python基础===* 解包,格式化输出和print的一点知识

    python3中的特性: >>> name = "botoo" >>> print(f"my name is {name}" ...

  6. grep常见操作整理(更新)

    提取邮箱和URL [root@test88 ~]# cat url_email.txt root@gmail.com,http://blog.peter.com,peter@qq.com [root@ ...

  7. google fcm 推送的流程

    总结:1.给一个人推,能成功,2.给多个人推,有两种,一种是给组推,一种是给主题推,之前用的是组推,但是不成功,这里换成主题推: <?phpnamespace App\Http\Controll ...

  8. IE6下面的浮动问题

    第一个问题: 在IE6下面overflow:hidden;失效      原因:在IE6/7中子级设置position:relative;属性值后,导致父级的overflow:hidden;失效.   ...

  9. vscode的go插件安装

    vscode安装go的很多插件都是失败,如下: Installing 5 tools at E:\www\go_project\bin go-symbols guru gorename goretur ...

  10. NYOJ 116 士兵杀敌二

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...