一、cookie和session的区别
1、作用范围不同,Cookie是运行在客户端,Session是运行在服务器端。
2、存储大小不同,Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
3、 安全性不同,通过拦截或本地文件找得到你的cookie后可以进行攻击。Session 存储在服务端,安全性相对 Cookie 要好一些。
4、有效期不同,Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效。
二.Session与Token的区别
1.token和session都是为了身份验证,Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息。而 Token 是令牌,访问资源接口时所需要的资源凭证。Token 使服务端无状态化,不会存储会话信息。
2..身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全。
3.Token 提供的是认证和授权 ,认证是针对用户,授权是针对 App 。其目的是让某 App 有权利访问某用户的信息。这里的 Token 是唯一的。不可以转移到其它 App上,也不可以转到其它用户上。Session 只提供一种简单的认证,即只要有此 SessionID ,即认为有此 User 的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方 App。所以简单来说:如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token 。如果永远只是自己的网站,自己的 App,用什么就无所谓了。移动端对 cookie 的支持不是很好,而 session 需要基于 cookie 实现,所以移动端常用的是 token
4.时间与空间的博弈:session是空间换时间,而token是时间换空间。
扩展原理
cookie原理:浏览器第一次访问服务端时,服务器创建一个独特的身份标识数据,格式为key=value,放入到Set-Cookie字段里,随着响应报文发给浏览器。浏览器看到有Set-Cookie字段以后就知道这是服务器给的身份标识,于是就保存起来,下次请求时会自动将此key=value值放入到Cookie字段中发给服务端。服务端收到请求报文后,发现Cookie字段中有值,就能根据此值识别用户的身份然后提供个性化的服务
Session原理:Session是将要验证的信息存储在服务端,并以SessionId和数据进行对应,SessionId由客户端的cookie存储,在请求时将SessionId也带过去,因此实现了状态的对应。
token原理如图:客户端发送user id给服务器,然后服务器生成一个token返回给客户端,客户端请求时在请求头里带上token,这样服务器就去检验token,检验通过,就返回请求数据。
token保存在客户端上,这样不占用服务器资源。