COOKIE
Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。
session
Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
cookie与session的区别
区别
1.存取方式的不同,Cookie中只能保管ASCII字符串,而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。
2.隐私策略的不同,Cookie存储在客户端阅读器中,对客户端是可见的,而Session存 储在服务器上,对客户端是透明的。假如选Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。
3.有效期上的不同,Cookie可以方便的设置。Session依赖于名为JSESSIONID的Cookie,而且假如设置Session的超时时间过长,服务器累计的Session就会越多,越容易招致内存溢出。
4.服务器压力的不同,Session是保管在服务器端的,每个用户都会产生一个Session,耗费大量的内存。而Cookie保管在客户端,不占用服务器资源
5.跨域支持上的不同,Cookie支持跨域名访问,而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
token
token是用户身份的验证方式,我们通常叫它:令牌。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库。
应用场景:
A:当用户首次登录成功(注册也是一种可以适用的场景)之后, 服务器端就会生成一个 token 值,这个值,会在服务器保存token值(保存在数据库中),再将这个token值返 回给客户端.
B:客户端拿到 token 值之后,进行本地保存。(SP存储是大家能够比较支持和易于理
解操作的存储)
C:当客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带
到参数中发送给服务器.
D:服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值 做对比
对比一:如果两个 token 值相同, 说明用户登录成功过!当前用户处于登录状态!
对比二:如果没有这个 token 值, 则说明没有登录成功.
对比三:如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录.
session和 token并不矛盾,作为身份认证token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了