session和token 都是验证客户端的
session:会话id ,服务端用来区分客户端的,服务端对客户端的一个身份证验证的东西,调用登录接口的时候服务端生成返回给客户端 ,服务端和客户端都要保存
下次请求时,客户端携带过来。服务端查找之前有没存储过。有的话就是合法用户。没有就不是合法用户,如果用户量很大了。服务端就存在保存压力。。而且服务端有多个的话。也就是负载均衡处理。可能另外的几个服务器也需要拷贝保存的数据,也就是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。
有很多的限制性,扩展性不好
根据登录的账号密码
服务端返回session给客户端 自己也会保存一份
session 客户端自己保存 ,每次请求带上
每次请求查下是不是一样就验证了
但是如果服务端用户量很大。。做了负载均衡。。A和B服务器可能只有A有
就存在问题了。。B需要复制
Token:令牌,服务端对客户端的一个身份证验证的东西,调用登录接口的时候服务端生成返回给客户端保存。。服务端不用保存。。每次请求的时候携带。服务端用秘钥验证就可以了
登录的时候根据用户名和密码 然后用HMAC-SHA256 算法和密钥对身份数据签名返回token
客户端每次请求携带token
这个tokenf 服务器不保存, 当小F把这个token 给我发过来的时候,我再用同样的HMAC-SHA256 算法和同样的密钥,对数据再计算一次签名, 和token 中的签名做个比较, 如果相同, 我就知道小F已经登录过了,并且可以直接取到小F的user id , 如果不相同, 数据部分肯定被人篡改过, 我就告诉发送者:对不起,没有认证。
其实就是服务端有别人不知道的秘钥 。。每次用秘钥来验证。服务端不需要保存。这就解决了服务端跨端 和保存的问题
cookie:
cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。