一.Session使http协议成为有状态协议(浏览器cookie本地这个session,服务器端也有这个session)
1.ajax前端登陆无法保存session,造成无法维持登陆状态(http本身就是无状态协议,登陆就是要变成有状态协议)?怎么解决?
:后台一直显示没有登陆,虽然前端已经登陆了。(默认用session保持的登陆状态)
1).查看前端是否传sessionID过来了,session是保存在客户端的cookie里的,同时又是保存在服务器端的,两端都有session才能保持登陆状态嘛。
2).果然,发现虽然登陆成功了,但是后面的接口请求,http header里并没有传过来session。
3).就需要登陆操作后,js调用浏览器存储下来刚刚得到的sessionID。
但前端是无法存储数据的,只能通过调用浏览器的cookie来进行存储这个session。下次再调用时候传过来这个sessionID。
二.Token使Http协议成为有状态协议
1.理解流程和session一样,要生成一个数据,浏览器前端和后端都有的中介介质,才能让前后端成为有状态协议。
怎样维持状态?当然是要有共同的东西啊,才能维护有状态协议。
具体HTTP成为有状态协议步骤:
1).登陆操作行为时:传过来用户名和密码,判断是否正确。如果正确,则产生session(服务器容器会自动生成session,这时候你只需要在这个session里存储数据即可)或者生成一个Token。
注:产生session/Token这个步骤永远在登陆接口里,用户名或者密码验证成功后。
2)将登陆成功后产生的这个sessionID或者Token返回给前端,前端进行保存,后续其他接口要传入这个数据。
三。Token和Session区别
1)Token和Session的区别:
Token是完全由程序员自己决定生成策略的。并要程序员自己要想好这个Token存储在哪里,Token不像Session由容器自己来存储和维护(Session就是一个cocurrenthashmap)。所以程序员自己要决定好在哪里存储Token,一般都要利用专门的Redis缓存服务器来存储这个Token。
Session保存在本地服务器容器中,程序员不用管怎么生成,只需要登录成功后向本例的Session里面塞入数据即可。Session你需要担心的就是因为是本地存储,存在内存被撑爆的风险,内存不够用啊怕。所以用Session,只适用于用户量比较小的场景,比如后台管理系统等。
2)Session或者Token都是有保质期的,避免长期生成及避免内存被撑爆。自己生成的Token也要有保质期,Redis可以设置保质期。
Tomcat默认生成的Session生命周期是30分钟,
四.SSO单点登陆说白了就是在单独一个地方负责去存储和验证这个Token。
SSO单点登陆说白了就是在单独一个地方负责去存储和验证这个Token。
SSO单点登陆说白了就是在单独一个地方负责去存储和验证这个Token。
每个业务系统都去这个单点登陆服务器去请求生成Token,和验证某个Token的有效性。
每个业务系统都去这个单点登陆服务器去请求生成Token,和验证某个Token的有效性。
每个业务系统都去这个单点登陆服务器去请求生成Token,和验证某个Token的有效性。
三。JWT变相实现让HTTP成为有状态协议
原理:每次的请求,jwt算法都会返回下次访问需携带的Token,这样两端都不需要保存Token或者Session。
所以JWT要做的就是1.检验本此传入请求的Token有效性及2.产生下次访问旭携带的Token