sessionStorage、localStorage与cookie、session详解

cookie和session的区别

由于HTTP是一种无状态的协议,数据交换完毕后会关闭连接,为了分辨一个请求是谁发起的,以免在同一个网站每打开一个页面都需要重新登录,引入了Session和Cookie两个机制。
Cookie和Session都是用来跟踪浏览器用户身份的方式。

1、保持状态
Cookie保存在浏览器端,Session保存在服务器端

2、使用方式:
(1)Cookie:
第一次登陆后,服务器会生成一个cookie,并通过set-cookie响应头将包含有cookie的数据传给浏览器,然后被浏览器保存在本地。当该用户发送第二次请求时,浏览器就会自动把上次存储的Cookie携带在请求中发送给服务器,服务器根据这个Cookie就可以判断是哪个用户进行的操作。
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。

(2)Session:
有了Cookie来区分身份,还需要session来存储用户详细信息以供调用,因为这些信息是是隐私信息,直接把信息通过cookie发到并保存在客户端是很不安全的,且cookie大小不能超过4k,不支持中文。
当浏览器发起一个请求时,服务器会先检查是否携带了存有SessionID的cookie。如果有,那么就会从服务器的session里取出这个ID对应的session返回给浏览器。如果客户端请求中没有SessionID,服务器会创建新的session,并把SessionID返回给客户端。

如果用户禁用cookie,就需要将SessionID拼接到访问地址后。

3、存储内容
cookie只能保存字符串类型,session通过类Hashtable的数据结构来保存,支持任何类型的对象(session中可含有多个对象)

4、存储大小
cookie:单个cookie保存的数据不能超过4kb;session大小没有限制。

5、安全性
session的安全性大于cookie。

原因如下:
(1)SessionID存储在cookie中,若要攻破session首先要攻破cookie;
(2)SessionID是要有人登录,或者启动session_start才会有,所以攻破cookie也不一定能得到SessionID;
(3)第二次启动session_start后,前一次的SessionID就是失效了,session过期后,SessionID也随之失效。
(4)SessionID是加密的

6、应用场景
cookie:
(1)判断用户身份,以便下次登录时能够实现单点登录(或记住密码)。
(2)保存上次登录的时间等信息。
(3)保存上次查看的页面

session:
(1)网上商城中的购物车
(2)保存用户登录信息
(3)将某些数据放入session中,供同一用户的不同页面使用
(4)防止用户非法登录

7、缺点
cookie:
(1)大小受限
(2)用户可以操作(禁用)cookie,使功能受限
(3)安全性较低
(4)有些状态不可能保存在客户端。
(5)每次访问都要传送cookie给服务器,浪费带宽。
(6)cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下。

session:
(1)Session保存的东西越多,就越占用服务器内存,对于用户在线人数较多的网站,服务器的内存压力会比较大。
(2)依赖于cookie(sessionID保存在cookie),如果禁用cookie,则要使用URL重写,不安全
(3)创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。

localStorage和sessionStorage的区别

HTML5提供了WebStorage API ,包括sessionStorage 和 localStorage ,可以方便的在web请求之间保存数据。克服了cookie带来的一些限制。
有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。

1、生命周期
localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失,除非主动删除数据。
sessionStorage的生命周期是在仅在当前会话下有效,关闭了浏览器窗口后就会被销毁。

2、存储大小
localStorage和sessionStorage的存储数据大小一般都是:5MB

3、存储位置
localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。

4、存储内容类型
localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理

5、获取方式
localStorage:window.localStorage;
sessionStorage:window.sessionStorage;

6、应用场景
localStoragese:存储用户的一些设置;记录浏览器对页面的访问次数;
sessionStorage:适合单页应用各业务模块之间传值;

WebStorage与cookie的区别

1、存储空间
cookie为4KB
WebStorage是5MB

2、传输方式
WebStorage不会传送到服务器,存储在本地的数据可以直接获取,所以不必担心被截取。
cookie在每次请求中都会传送到服务器,不管是否被需要。

3、过期时间
cookie的过期时间由设置的Expire决定,到期就会销毁,如果这个值为0或负数,就是会话期间有效。
localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失,除非主动删除数据。
sessionStorage的生命周期是在仅在当前会话下有效,关闭了浏览器窗口后就会被销毁。

4、快速获取
有的数据存储在WebStorage上,从本地获取会比从服务器端获取快得多。

5、操作性
WebStorage提供了一些方法,数据操作比cookie方便;

setItem (key, value)  //保存数据,以键值对的方式储存信息。
getItem (key)  //获取数据,将键值传入,即可获取到对应的value值。
removeItem (key)  //删除单个数据,根据键值移除对应的信息。
clear ()  //删除所有的数据
key (index)  //获取某个索引的key

猜你喜欢

转载自blog.csdn.net/lixinyi0622/article/details/84637578