用Token形式记录登录态
Token是将用户信息编码后通过响应报文传给前端,之后每一次请求,请求报文中都会带有这段编码信息,后端通过解码获得用户信息,这个方法也称为JWT(Json Web Token)
JWT由三部分组成
- Header,通常是一个JSON对象
{
"alg": "HS256",
"typ": "JWT"
}
alg属性代表进行加密的签名的算法,默认是HS256
type属性代表这个令牌的类别
- Payload,用于存放实际需要传输的数据,JWT官方规定的字段如下:
iss:签发人
exp:过期时间
sub:主题
aud:受众
nbf:生效时间
iat:签发时间
jti:编号
也允许我们自定义一些字段(比如:用户名,密码)
- Signature
用于对前两部分的数据进行签名,防止数据篡改。由服务端定义生成一个密钥,然后将这三个部分进行签名算法加密,连接成一个字符串,通过响应报文发送给客户端。
问题1: 假设我登录了某网站,下次再打开页面时,还是登录状态,是如何记录我的登录状态的呢?
可以通过token,cookie里面access token和refresh token。access token有过期时间,如果过期了就用refresh token申请新的access token,如果refresh token再过期就要重新登录。
但看了几个网站,好像都不是用token实现的,csdn好像还是session。
问题2: 我在搜狗浏览器上登录了牛客网,然后我又在谷歌浏览器登录了,然后搜狗这边就会下线,如何实现?
猜想:维护一个用户的在线列表容器,
问题3: 同一个浏览器,登录多个用户账号,刷新后会更新为最后一个登录的用户,为什么,如何实现同一个浏览器可以登录多个用户账号?
参考资料