参考链接
https://blog.csdn.net/qq_38560742/article/details/82717167 这篇较长
token_sessioncookie_1 | https://cloud.tencent.com/developer/news/247610 |
比喻理解看token_sessioncookie_1
sessioncookie_1 |
https://www.cnblogs.com/shiyangxt/articles/1305506.html |
Http 协议是一个无状态协议, 客户端每次发出请求, 请求之间是没有任何关系的.
cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案
cookie是解决了快速登录的验证,session是为了解决用户上次浏览,做了哪些操作的一些部分信息记录在session中
token
在非Web的情况下, 没有Cookie的时候,怎么解决用户身份认证问题.
关于Tooken:
现在的服务端的组件渐渐升级, 更像是提供API, 使得前端和后端的概念解耦, 移动应用和网页应用可以使用相同的后端. 在非Web的情况下, 没有Cookie的时候,怎么解决用户身份认证问题.
API 应该设计成无状态的, 这意味着没有登陆,注销的方法, 也没有Sessions, API的设计者同样也不能依赖Cookie, 因为不能保障这个请求都是有浏览器所发出的, 自然我们需要一个新的机制, Token就是为了解决这个问题的
Token 通常叫令牌, 最简单的Token组成 uid(用户唯一身份标识),time(时间戳),sign(签名 用token的前几位+盐以hash算法压缩成一定长的十六进制字符串,可以防止恶意的第三方拼接token 请求服务器),还可以把不变的参数也放进token,避免多次查库.
我们可以把Token想象成一个安全的护照。你在一个安全的前台验证你的身份(通过你的用户名和密码),如果你成功验证了自己,你就可以取得这个。当你走进大楼的时候(试图从调用API获取资源),你会被要求验证你的护照,而不是在前台重新验证。
Token 的使用流程:
A:当用户首次登录成功(注册也是一种可以适用的场景)之后, 服务器端就会生成一个 token 值,这个值,会在服务器保存token值(保存在数据库中),再将这个token值返回给客户端;
B:客户端拿到 token 值之后,进行本地保存;
C:当客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器;
D:服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值做对比。
Token的身份认证逻辑:
对比一:如果两个 token 值相同, 说明用户登录成功过!当前用户处于登录状态!
对比二:如果没有这个 token 值, 则说明没有登录成功;
对比三:如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录。
转自token_sessioncookie_1 https://cloud.tencent.com/developer/news/247610
原文地址:https://www.cnblogs.com/woainixxx/p/10822999.html