Cookie Session Token 存在的意义
Http 协议是一个无状态协议, 客户端每次发出请求, 请求之间是没有任何关系的.
比如在淘宝登陆页面登陆成功了, 当你跳转到商品页面, 服务端如何知道是"你"在访问这个商品页面, 因为这个商品页面很多个人都可以访问,服务器为了区分到底是谁在访问这个页面, Cookie Session就是为了解决这个问题的.
Cookie 和 Session 到底是怎么来解决这个问题的呢, 举个例子:
小杨要去一个写字楼, 第一次需要到前台填写登记表格, 登记完成之后前台给了小杨一张通行卡, 这栋大楼内部的安保人员看到通行卡就能确认小杨的身份信息和授权信息.
这里小杨就是客户端, 通行卡就是Cookie,前台就是服务端, 表格就是Session. 客户端第一次访问服务器, 服务器端保存客户的信息并且给客户端一个Cookie, 客户端携带Cookie去访问服务端, 服务端通过携带的Cookie找出该用户信息. 服务端就能够知道是谁访问了.
为了方便理解,可以先看下这张流程执行图加深概念:
总之 Session 是对服务端来说的, 客户端没有Session这一说.
关于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 和 Session 的区别
Session和 token并不矛盾
记得关注我.
领取专属 10元无门槛券
私享最新 技术干货