# 来看看cookie和session localStorage和sessionStrorage
👉Cookie:储存在用户本地终端上的数据。一般由服务器生成,可设置过期时间(expires属性)。
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。通常,它用于告知服务端两个请求是否来自同一浏览器。
👉Session:Session对象存储特定用户会话所需的属性及配置信息,一旦关闭浏览器,所有数据都会消失。
当服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid。如果有sessionid,服务器将根据该id返回对应session对象。如果客户端请求中没有sessionid,服务器会创建新的session对象,并把sessionid在本次响应中返回给客户端。通常使用cookie方式存储sessionid到客户端,在交互中浏览器按照规则将sessionid发送给服务器。
来看看这两者的区别:
| 区别 | cookie | session |
|---|---|---|
| 存储位置 | 客户端 | 服务器端 |
| 大小 | 一个站点<=4kb | 无上限 |
| 数据类型 | 只能保存ASCII | 任意数据类型 |
| 有效期 | 如未设置过期时间,则到浏览器关闭 | ? |
| 可跨域名性 | 不可 | ? |
| 安全性 | 对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗 | 存储在服务器上,安全性相对 Cookie 要好一些。 |
应用
- cookie
- 判断用户是否登陆过网站,以便下次登录时能够实现自动登录(或者记住密码)
- 保存上次登录的时间等信息。
- 保存上次浏览的页面
- 浏览计数
- session:用于保存每个用户的专用信息,变量的值保存在服务器端,通过SessionID来区分不同的客户
- 网上商城中的购物车
- 保存用户登录信息
- 将某些数据放入session中,供同一用户的不同页面使用
Cookie存储机制是HTML4的,他有很多的缺点和局限性,所以在HTML5中,推出了新的存储机制Web Strorage,这它分为以下两种:
👉localStorage(本地存储):该对象可将数据长期保存在客户端,即使是重新打开浏览器也不会丢失。
如果要清除对象保存内容,需调用localStorage.removeItem(key)。localStorage.setItem(key,value); localStorage.getItem(key);
localStorage.clear()清楚全部的数据,localStorage在所有同源窗口中共享;
👉sessionStrorage(会话存储):保存用户临时会话数据;一旦关闭浏览器,所有数据都会消失。sessionStorage不在不同浏览器窗口中共享
总结:
| 区别 | 存储位置 | 大小 | 有效时间 | 作用域 |
|---|---|---|---|---|
| cookie | 客户端 | <=4kb | 默认是到浏览器关闭,设置时间之后,在过期时间内都有效 | 在所有同源窗口中共享 |
| session | 服务器端 | 没有大小限制但尽可能小 | 仅在当前的浏览器窗口关闭前有效 | 不在所有同源窗口中共享 |
| localstroage | 本地 | 5M | 除非手动删除,一般永久有效 | 在所有同源窗口中共享 |
| sessionstroage | 本地 | 没有大小限制但尽可能小 | 仅在当前的浏览器窗口关闭前有效 | 不在所有同源窗口中共享 |
Service Worker