一次搞明白 Session、Cookie、Token,面试问题全搞定

如题所述

第1个回答  2022-07-24

01

它们分别是什么?

session:

session的中 翻译是“会话”,当 户打开某个web应 时,便与web服务器产 次session。服务器使 session把 户的信息临时保存在了服务器上, 户离开 站后session会被销毁。这种 户信息存储 式相对cookie来说更安全,可是session有 个缺陷:如果web服务器 做了负载均衡,那么下 个操作请求到了另 台服务器的时候session会丢失。

cookie:

cookie是保存在本地终端的数据。cookie由服务器 成,发送给浏览器,浏览器把cookie以kv形式保存到某个 录下的 本 件内,下 次请求同 站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加 了 些限制确保cookie不会被恶意使 ,同 时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

cookie的组成有:名称(key)、值(value)、有效域(domain)、路径(域的路径, 般设置为全局:"")、失效时间、安全标志(指定后,cookie只有在使 SSL连接时才发送到服务器(https))。

token:

token的意思是“令牌”,是 户 份的验证 式,最简单的token组成:uid( 户唯 的 份标识)、time(当前时间的时间戳)、sign(签名,由token的前 位+盐以哈希算法压缩成 定长的 六进制字符串,可以防 恶意第三 拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库。


02

它们之间有什么关系?

cookie,session都可以是token存储的一种方式。

cookie为存储在本地的数据,请求时会将该数据提交到服务器验证使用。

session为存储在服务器上的内存数据,只要会话没有中断,那么该数据持续有效。

toke通常上来说属于令牌,cookie,session为一种数据存储和使用方式,令牌可以存储在cookie,session,但是实际上通过url参数或者表单参数一样可以达到同样的效果。但是对于开发和维护来说成本较高,一旦后端要求修改参数,这样的使用方式对于修改来说是很头疼的事情。


03

它们本质上的区别?

session的使用方式是客户端cookie里存id,服务端session存用户数据,客户端访问服务端的时候,根据id找用户数据。

而token的使用方式是客户端里存id(也就是token)、用户信息、密文,服务端什么也不存,服务端只有一段加密代码,用来判断当前加密后的密文是否和客户端传递过来的密文一致,如果不一致,就是客户端的用户数据被篡改了,如果一致,就代表客户端的用户数据正常且正确。

流程:

session,注册登录->服务端将user存入session->将sessioni存入浏览器的cookie->再次访问时根据cookie里的sessionid找到session里的user。

token,注册登录->服务端基于用户信息与密钥生成一个token->将token+user 返回给浏览器->再次访问时传递token+user+密文数据,后台会再次使用user与密钥生成token,与传递过来的token比较,一致则正确。

session、cookie、token 这几个概念在面试中可以说是经常出现的,因为通过这个概念基本上可以了解到你对网络请求或者权限管理这一块是否有过了解和实际的应用。

相似回答