本文主要讲解“分析会话和令牌”,简单明了,易学易懂。请跟随边肖的思路一起学习《分析会话与表征》!
01.Cookie
是在客户端(浏览器)保存用户信息的机制;cookie由服务器生成,发送到浏览器,然后浏览器将cookie以键值对的形式保存在客户端的目录中。每个浏览器的存储大小会有一些差异,一般不超过4KB
在下一个请求中,Cookie将被发送到服务器,服务器将分析Cookie中的信息并验证身份。
例如,当你加入一家公司时,你会得到一张工作卡,上面有你的名字、工作号码、部门等信息。当你进入工作场所时,你可以带着工作证进出。
但是Cookie不能跨域名使用;就好像我拿着公司的工作证去你们公司,保安肯定不让我进去。
02.Session
存储在服务器中,可用于记录客户状态;
例如,我们经常使用Session保存客户的基本信息和权限信息。用户第一次登录后,服务器将创建一个会话,并将会话ID返回给浏览器。浏览器通常将其写入一个Cookie,也称为会话Cookie。当浏览器再次访问时,它只需要使用SessionID从服务器上查找会话。
此外,这个SessionID不必保存在Cookie中,但是对于浏览器客户端来说,每个人的默认做法是将其放在Cookie中。
03.Cookie 和 Session
关于cookie和会话的区别,很多同学会回答:“cookie存储在客户端,会话存储在服务器端”。其实这个想法并不全面:
Cookie是一个真实的东西,一个非常具体的东西,也就是一条数据。会话是一个抽象的概念,或者说模式方法,它有很多实现方案。
比如Tomcat的实现方法:将状态保存在服务器中,然后生成一个JSESSIONID放入Cookie中;请求到来后,用JSESSIONID在服务器端查询和验证状态。
04.Token
当然,随着用户数量的增加,存储在服务器中的Sessions也在增加,给服务器带来了很大的压力。此外,如果程序部署在集群或分布式模式下,同一用户第一次请求访问A服务器并创建会话,但第二次请求被发送到B服务器,但B服务器上没有以前创建的会话。这就是分布式体系结构中的会话共享问题。
为了解决这个问题,我们可以在服务器之间同步会话,或者简单地将会话保存到第三方组件,比如Redis但是不管怎样,会话成为了项目的负担。
这时服务器会想,如果Session没有和我一起保存,第一时间把用户名和密码发给我,我验证后给你一个通行证,然后客户端每次请求的时候都会带这个通行证;
这张通行证是代币。当然,验证结果需要包含客户端信息,服务器需要知道是谁发出的请求。还需要包含时间信息,因为通行证不可能永远有效;通行证不能用明文写,否则会有被拦截的风险。
HMAC-SHA1:
令牌=用户标识|到期日|HMAC(用户标识|到期日,k)AES:
令牌=AES(用户id |到期日,x)RSA:
令牌=RSA(用户标识|到期日,私钥)
05.SSO 单点登录
有的公司会搭建统一的登录系统(单点登录),客户端先获取令牌,验证后再拿着这些令牌访问其他系统;API Gateway也可以提供类似的功能,我们公司就是这样。客户端访问时,首先从网关获取Token,通过身份验证后才能访问授权接口,一段时间后,必须再次更改Token。
06.Token 和 Session
对于会话和令牌,它们之间没有本质区别。两者都是加密字符串,可以进行身份验证。当然,token和session也有一些区别,比如token更容易跨域,token更好控制等。另外,在授权场景中,token比session有更大的优势;
比如我开发了一个允许微信用户登录的网站。使用令牌的过程是这样的:
登录网站时,跳转到微信登录页面;
输入用户名和密码登录微信后,给我们一个令牌;
用户可以在我们的网站上使用令牌,我们的网站不需要知道你的微信用户名和密码。
总之,在同一个网站中,token和session没有太大的区别,如果跨站点使用,token会更方便。
感谢阅读。这就是“分析会话和令牌”的内容。看完这篇文章,相信你对分析Session和Token有了更深的理解,具体用法还需要实践验证。在这里,边肖将为大家推送更多相关知识点的文章。欢迎关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/71152.html