导航
1、session+cookie 和 token有什么区别?
首先了解一下什么是session、cookie和token
Session
Session存在于服务端,对于客户端来说是没有Session这个说法的,当服务端与客户端进行连接的时候,服务端的Session就会转换为一个临时的Cookie发送给客户端,如果是Session不存在的话,服务端就会创建一个Session,如果存在的话,就会使用这个Session(当用户从网站的服务器上退出的时候,那么这个Session也会随之消失)。
如果是服务器做了负载均衡的话,在不同的服务器上Session会失效,就要使用有些技术来实现Session的同步。
Cookie
存储在浏览器上,一个浏览器可以存储的Cookie为200个,一个web的网站能设置的Cookie不能超过20个,Cookie的大小不能超过4K
1、客户端发送HTTP请求到服务端
2、服务端收到请求之后,会发送一个响应头到客户端,这个响应头就包含Set-Cookie的头部
3、客户端发送第三次的请求(如果说服务需要我们发送一个Cookie的话,那么在第二次的过程中时,就会将上一次拿到的Cookie发送个服务端),提供了服务端可以识别客户端的信息。
持久化的Cookie和非持久化的Cookie
持久化的Cookie:可以存在于硬盘中,浏览器关闭的话,Cookie也是会存在的。
非持久化的Cookie:存在与内存中,如果浏览器关闭的话,Cookie也会随之消失。
token
(1)用户第一次登陆的时候,服务端会产生一个token,token会存在于服务器的数据库上,然后将这个token返回给浏览器。
(2)客户端收到token之后会将token存储在本地上
(3)客户端再次发送请求的时候,会将token发送到服务器上
(4)服务端收到这个token的时候会将token与本地的token进行比较,可以来验证身份。
小结
1、session存储于服务器,可以理解为一个状态列表,拥有一个唯一识别符号sessionId,通常存放于cookie中。服务器收到cookie后解析出sessionId,再去session列表中查找,才能找到相应session。依赖cookie
2、cookie类似一个令牌,装有sessionId,存储在客户端,浏览器通常会自动添加。
3、token也类似一个令牌,无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。
浏览器是如何记录用户登陆状态的?
so easy!