参考链接
https://blog.csdn.net/qq_38560742/article/details/82717167 这篇较长
Cookie机制
Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);
什么是Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
token_sessioncookie_1 | https://cloud.tencent.com/developer/news/247610 |
比喻理解看token_sessioncookie_1
sessioncookie_1 |
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
那么问题来了,我们官网的登录,注销,secure必须登录才可以调用这个接口是怎么做的