cookie,session,localStorage,sessionStorage的区别

204 阅读2分钟

一、保持状态

   cookie,localStorage,sessionStorage保存在浏览器端,session保存在服务器端的内存中 

二、生命周期

1. cookie
   (1)设置最大超时时间Max-Age
   如果没有超过最大超时时间,只要用户不主动清空,或者开发人员通过js代码删除,数据一直存在不会销毁
   (2)不设置最大超时时间(会话cookie)
   关闭当前页面或者浏览器,都会导致会话cookie中的数据丢失
   
2.session
    Session在用户访问第一次访问服务器的时候创建,html、image等静态资源并不会创建Session。
    服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟,开发人员可以通过手动控制删除。
    
3. localStorage
   只要用户不主动清空,或者开发人员通过js代码删除,数据一直存在不会销毁
4. sessionStorage
   关闭当前页面或者浏览器,都会导致sessionStorage中的数据丢失
   

三、存储位置

1.cookie
    (1)设置最大超时时间Max-Age,存储在硬盘,生命周期随浏览器的关闭而结束
    (2)不设置最大超时时间(会话cookie),存储在内存,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失
2.session => 服务端内存

3.localStorage=>硬盘
    
4.sessionStorage=>内存

四、存储大小

1. cookie	=>  4KB
2. session  => 不限大小
3. localStorage  =>  5MB
4. sessionStorage  =>  5MB

五、与服务器之间的关系

1.cookie
    服务器创建,浏览器存储
    浏览器能否使用该cookie,会受到服务器约束

2.session 
    存储在服务器
    
3.localStorage
    无关服务器

4.sessionStorage
    无关服务器
    

六、比较四者的优缺点

1. cookie体积小,session最大
2. cookie每次发送请求都会自动携带上(有些请求不需要cookie中的数据,但还是会自动携带上),浪费带宽
3. cookie受服务器和用户约束,可能会导致有些功能实现不了,需要多写代码
4. 用户可能会有意无意的清除cookie
5. cookie的安全性比较差(cookie欺骗,cookie截获),session的安全性大于cookie,但是如果服务器宕机了,session数据可能会丢失。
6.过度使用session变量将会导致代码不可读而且不好维护