前言
首先我按照它们存储数据位置不同划分为cookie+session,localstorage+sessionstorage俩大类,划分原因是cookie保存在浏览器端,session保存在服务器端,这两者都不是存储在本地,而后者直接保存在客户端本地了,这大大减轻了服务器端的负担,同时,也加快了访问数据的速度。
先讲cookie与session
存储位置
cookie保存在浏览器端,session保存在服务器端
机制
cookie:
- 如果不设置过期时间,cookie保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。
- 如果设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据任然存在,直到过期时间结束才消失。
- cookie是服务器发给客户端的特殊信息,cookie是以文本的方式保存在客户端,每次请求时都带上它。
session:
- 当服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid。
- 如果有sessionid,服务器将根据该id返回对应session对象。
- 如果客户端请求中没有sessionid,服务器会创建新的session对象,并把session在本次响应中返回给客户端。
- 通常cookie方式存储sessionid到客户端,在交互中浏览器按照规则将sessionid发送给服务器。如果用户禁用cookie,则要使用URL重写,可以通过response.encodeURL(url)进行实现
存储内容
cookie只能保存字符串类型,以文本的方式,有大小的限制!session能支持任何类型的对象(可多个),没有大小限制!!同时session安全性要远大于cookie(因为要攻破session之前要先攻破cookie!!!)
注意:
cookie由对服务器的请求来传递,每次都会携带HTTP头中,如果使用cookie保存过多数据会带来性能问题!!
应用
cookie:
- 判断用户是否登录过网站,以便下次登录时能够实现自动登录(或者记住密码)。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。
- 保存上次登录的时间等信息。
- 保存上次查看的页面
- 浏览计数
session:
Session用于保存每个用户的专用信息,变量的值保存在服务器端,通过SessionID来区分不同的客户。
- 网上商城中的购物车
- 保存用户登录信息
- 将某些数据放入session中,供同一用户的不同页面使用
- 防止用户非法登录
总结
这两者各有各的优缺点,具体的使用要根据实际情况来选择!!
sessionStorage与localStorage
机制
sessionStorage:
- 将数据保存在session对象中。
- 所谓session,是指用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。
- session对象可以用来保存在这段时间内所要求保存的任何数据。
localStorage:
将数据保存在客户端本地的硬件设备(通常指硬盘,也可以是其他硬件设备)中,即使浏览器被关闭了,该数据仍然存在,下次打开浏览器访问网站时仍然可以继续使用。
这两者的区别在于:sessionStorage为临时保存,而localStorage为永久保存。
存储位置
localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。
存储内容类型
localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理。详情可参考我之前的文章
优点
两者可统称为WebStorage,他们的优点有:
- 存储空间更大,相对于cookie的(4k),它有5m左右
- WebStorage不会传送到服务器,存储在本地的数据可以直接获取,也不会像cookie一样每次请求都会传送到服务器,所以减少了客户端和服务器端的交互,节省了时间,速度更快,同时也会比较安全!
这里特地讲一下session与sessionsorage
强调一点:
两者事实上是没有任何关联的(我一开始也以为有关系,错付了。。)
原因:
- session存储于服务器端,而sessionstorage位于客户端,没有任何关联
- 而且虽然说他们都是在对话周期结束后删除,但对两者而言,对话周期所代表意义不是一样的
对session而言关闭浏览器或者服务器端Session过期,会话结束
对sessionstorage而言关闭当前选项卡或者浏览器窗口