本文分为三大板块:  

  1 webStorage的概念    

  2 cookie/localStorage/sessionStorage的介绍

  3 三者之间的共同点和区别

**所有代码引用均来自

作者:OBKoro1
链接:https://juejin.im/post/5a191c47f265da43111fe859
来源:掘金

首先要明确一个概念 webStorage

webStorage:是h5提供的两种在web请求之间保存数据,有了本地数据就可以避免数据在浏览器和服务器之间不必要地来回传递。

它的好处是:

1 减少网络流量,一旦保存在本地以后就可以避免再向服务器请求数据了

2 性能好 从本地读取数据比从服务器获取快得多,加上浏览器有缓存几乎可以立即显示

使用场景:

从安全性上来说,每次http请求都会携带cookie,这样无形中浪费了网络资源,所以如非必要不用cookie。此外cookie还需要指定作用于,不可以跨域调用,限制比较多,但是用来识别用户登录,还是十分方便的。针对登录过的用户,服务器端会在登录时注入一段加密过的 唯一辨识单一用户的辨识码,下次只需要读取这个值就可以判断当前用户是否登录了

webStorage储存空间更大,而且数据储存后仅仅在本地,不会与服务器发生交互,因此不会浪费网络流量。并且有独立储存空间。具体细分的话,local接替了cookie管理购物车的工作,也能胜任其他工作,比如h5小游戏经常会产生一些本地数据,用local储存比较合适

session的话,有时候遇到一些内容很多的表单,为了优化用户体验,我们会把表单页面拆分成多个子页面(比如注册流程),这种情况就可以使用session了。

兼容性:

localStorage/sessionStorage IE8以上都支持,如果要兼容到IE6,就需要userData来储存

基本概念

cookie:大小限制在4kb左右,主要用途在于保存登录信息,比如某些网站的记住密码功能,保存在本地,生命周期有限制,可手动清除。

它的主要内容包括 名字、值、过期时间,路径与域一起构成cookie的作用范围,若不设置时间,默认关闭窗口后cookie消失,这种生命周期的cookie被称为会话cookie。

使用方式:

保存cookie值:

var dataCookie='110';
document.cookie = 'token' + "=" +dataCookie;

获取指定名称的cookie值:

 function getCookie(name) { //获取指定名称的cookie值
// (^| )name=([^;]*)(;|$),match[0]为与整个正则表达式匹配的字符串,match[i]为正则表达式捕获数组相匹配的数组;
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) {
console.log(arr);
return unescape(arr[2]);
}
return null;
}
var cookieData=getCookie('token'); //cookie赋值给变量。

localStorage:h5新加入的技术,兼容性较好,被IE8+浏览器支持,保存周期较长,可以保存5mb的信息,用于持久化本地储存,除非手动删除数据,不然是不会失效的。

使用方式:

var name='sessionData';
var num=120;
sessionStorage.setItem(name,num);//存储数据
sessionStorage.setItem('value2',119);
let dataAll=sessionStorage.valueOf();//获取全部数据
console.log(dataAll,'获取全部数据');
var dataSession=sessionStorage.getItem(name);//获取指定键名数据
var dataSession2=sessionStorage.sessionData;//sessionStorage是js对象,也可以使用key的方式来获取值 console.log(dataSession,dataSession2,'获取指定键名数据');
sessionStorage.removeItem(name); //删除指定键名数据
console.log(dataAll,'获取全部数据1');
sessionStorage.clear();//清空缓存数据:localStorage.clear();
console.log(dataAll,'获取全部数据2');

sessionStorage:与上一个接口类似,但是保存数据的生命周期不同,仅在当前网页会话下有效,关闭页面或浏览器后就会被清除。

这个很有意思,只要浏览器或页面没关闭,刷新页面或者进入同源的另一个页面,数据仍然存在。同时打开同一页面的不同窗口,它的对象也是不同的。

说了这么多,来看一下总结性的三者的异同吧

特性 cookie localStorage

sessionStorage

生命周期 可设置失效时间,默认是关闭浏览器后失效 除非被清除,否则永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小 4kb 一般为5MB 一般为5MB
HTTP请求

每次都会携带在http请求头中,如果使用cookie保存过多数据会产生

性能问题

仅在客户端(即浏览器)中保存,不参与和服务器的通信 仅在客户端(即浏览器)中保存,不参与和服务器的通信
易用性 需要程序员自己封装,源生的Cookie接口不友好 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持

查看数据存放处:

最后要说的是:不要把什么数据都放在 Cookie、localStorage 和 sessionStorage中,毕竟前端的安全性这么低。只要打开控制台就可以任意的修改 Cookie、localStorage 和 sessionStorage的数据了。涉及到金钱或者其他比较重要的信息,还是要存在后台比较好。

cookie和localstorage sessionStorage的概念、区别、使用场景的更多相关文章

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

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

  2. 本地存储 cookie,session,localstorage( 一)基本概念及原生API

    http://www.w3school.com.cn/html5/html_5_webstorage.asp http://adamed.iteye.com/blog/1698740 localSto ...

  3. cookie session localstorage sessionStorage区别

    cookie:http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html 重要特点: 1.cookie 有大小设置,有过期时间设 ...

  4. 前端 JS,localStorage/sessionStorage、cookie 及 url 等实现前台数据共享、传输

    需求是这样的:需要统计用户公司某款产品用户的回馈情况,美工给的设计多个psd,每个页面里面都有一个选择题,让用户选择自己的答案,最后经过几次选择之后在最后一个页面统一提交到后台!所以这里引出的技术需求 ...

  5. cookie、localStorage、sessionStorage之间的区别

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

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

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

  7. localstorage sessionstorage cookie的区别

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

  8. Cookie、LocalStorage 与 SessionStorage的区别在哪里?

    基本概念 Cookie Cookie 是小甜饼的意思.顾名思义,cookie 确实非常小,它的大小限制为4KB左右.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通 ...

  9. 客户端 localStorage, sessionStorage, cookie 的区别

    SessionStorage, LocalStorage, Cookie这三者都可以被用来在浏览器端存储数据,而且都是字符串类型的键值对! 区别在于前两者属于WebStorage,创建它们的目的便是存 ...

随机推荐

  1. 前端虚拟接口mockjs的使用

    最近在学习VueJS,也进一步学习了ES6,看了一遍之后,难免手痒,所以想仿写点什么,但是数据是个问题,你总不能写个分页,写个轮播吧,但是在公司做自己的东西找后台要接口也不那么像回事,怎么办呢? 无意 ...

  2. 20145335郝昊《java程序设计》第6周学习总结

    20145335郝昊 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 串流(Stream): 数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取出,可以使用输入串 ...

  3. JAVA链接数据库

    链接:http://www.cnblogs.com/centor/p/6142775.html 开发工具: MyEclipse MySQL JDBC驱动:mysql-connector-java-5. ...

  4. CentOS7系统安装配置samba服务

    # 查询是否已经安装了Samba rpm -qi samba # 安装 yum -y install samba samba-client samba-common # 添加新用户 useradd s ...

  5. DataStage系列教程 (Slowly Changing Dimension)缓慢变化维

    BI中维表的增量更新一般有2种: Type 1:覆盖更改.记录的列值发生变化,直接update成最新记录. Type 2:历史跟踪更改.记录值发生变化,将该记录置为失效,再insert一条新的记录. ...

  6. window_onload和body_onload

    onload 事件 Event 对象 定义和用法 onload 事件会在页面或图像加载完成后立即发生. 语法 onload="SomeJavaScriptCode" 参数 描述 S ...

  7. mysql查询日期内的所有日期代码

    一.MYSQL查询最近的三个月份的简便方法: select date_format(curdate(),'%Y-%m') from dual union MONTH),'%Y-%m') from du ...

  8. Maven打包命令

    mvn clean 会把原来target目录给删掉重新生成.mvn install 安装当前工程的输出文件到本地仓库,然后打包mvn clean install 先删除target文件夹 ,然后打包到 ...

  9. Codeforces Round #365 (Div. 2) B - Mishka and trip

    http://codeforces.com/contest/703/problem/B 题意: 每个点都有一个值,每条边的权值为这两个点相乘.1~n成环.现在有k个城市,城市与其他所有点都相连,计算出 ...

  10. 使用阿里云ECS安装HDFS的小问题

    毕设涉及HDFS,理论看的感觉差不多了,想搭起来测试一下性能来验证以便进行开题报告,万万没想到装HDFS花费了许多天,踩了许多坑,记录一下. 背景:使用两台阿里云学生机ECS,分处不同账号不同区域,一 ...