一、保持状态
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变量将会导致代码不可读而且不好维护