Session和Token的区别
在理解Session和Cookies的区别后:传送门
1、session出现的原因
因为http协议本身是无状态的,这样你本次请求和上次请求无法判断是不是同一个人操作的。
2、session的生成方式
浏览器在第一次访问服务器时,服务器会创建一个session,然后同时为该session生成一个唯一的会话sessionid。然后将sessionid和session存储到缓存/数据库中,然后服务器再把sessionid(名字为JSESSIONID的cookie),以cookie形式发送给客户端。
浏览器再次访问时会携带cookie中的sessionis,然后服务器根据sessionid找到对应的session进行匹配。
如果浏览器禁用了cookie/不支持cookie,可以通过URL重写的方式发送到服务。
3、token出现的原因
session的存储是需要空间的,session的传输一般都是通过cookie来传输,或url重写的方式。
token在服务器时可以不用存储用户信息的,token传递的方式也不限于cookie传递,token也可以保存起来。
4、token的生成方式
浏览器第一次访问服务器时,会传过来一个唯一表示ID,服务端通过算法,加密钥,生成一个token。通过BASE64编码后将token发送给客户端。
客户端将token保存起来,下次请求带着token,服务器收到请求会用相同的算法取验证toekn,如果通过就继续执行。
token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库
5、token和session的区别
共同点:都是保存了用户身份信息,都有过期时间。
session翻译为会话,token翻译为令牌。
session是空间换时间,token是时间换空间。
session和sessionid:服务器会保存一份,可能保存到缓存/数据库/文件。
token:服务器不需要记录任何东西,每次都是一个无状态的请求,每次都是通过解密来验证是否合法。
sessionid:一般是随机字符串,要到**服务器检索id的有效性。**出现请求:服务器重启饿内存中的session没了,数据库服务器挂了。