企业网站数据库,建设菠菜网站,阳西县网络问政平台公众号,网站建设主要课程先简单说一下单点登录#xff1a;
把登录的部分单独拿出来作为一个项目,专门用来登录。
当我想访问某个子项目或者模块的时候#xff0c;会先请求登录的部分#xff0c;如果登录过了#xff0c;就不需要再登录了。
这个和单独项目时#xff0c;把userId放到session中道…先简单说一下单点登录
把登录的部分单独拿出来作为一个项目,专门用来登录。
当我想访问某个子项目或者模块的时候会先请求登录的部分如果登录过了就不需要再登录了。
这个和单独项目时把userId放到session中道理是一样的。
因为多个子项目在不同的tomcat无法实现session共享这时我们可以利用cookie。 多说几句关于cookie和session的区别
cookie是针对于浏览器的session是针对服务器的。
cookie的产生会有JSessionId也就是session的唯一凭证。
cookie是当前浏览器对该父域名用作数据共享和记录的。
session是在服务器上开辟了一块内存用于当前session(同一JSessionId)用户的数据共享。
关于cookie和session的区别只是个人理解有不同的看法可以提多交流。 说一下流程
用户在一个模块登录会进到登录系统先验证你的用户名和密码是否正确如果正确。
会产生一个唯一票据我们这里叫他token,把这个token放到redis中存放方式是这样的。
redis.put(token,userId);//存储一条对应用户信息的token
redis,put(your setting,token);//再存储一条对应userId的唯一标识your setting可以写成loginSysuserId
为什么要这么存正常的思路是只存上面一条就行了稍后解答。 我们把token返回response.addCookie(new Cookie(my cookie,token));//这里的my cookie可以写成loingSysCookie
流程实现是这样的,需要设置过期时间等等参数这里就不写了。 这时候只要是同一浏览器就会带着这个cookie访问该项目下的子项目(父级域名下的子级域名,比如www.baidu.com和mp3.baidu.com的关系)
进入登录系统拿到token进到redis中比对是否有用户就可以了如果有就不需要再登录了。
下面说一下上面的疑问
当我再一次登录系统的时候先去找redis中的redis,get(your setting)是否为空已经在别处登录过的用户,可以取到他的token
redis.del(token),这样就实现了单点登录同步登出。
之后再设置redis和cookie方法同上。 很多没有redis中放第二条就无法实现单点登录同步登出虽然设置了过期时间但用户体验和安全性还是差一点。