win7驱动包下载-lol一直崩溃
![session timeout](/uploads/image/0576.jpg)
2023年4月4日发(作者:双显卡切换)
shiro中session,cookie,sessionid,超时时间的关系
这⾥有⼏个知识点可以说⼀下:
cookie的失效时间
maxAge,单位为秒,有三种值:正数,负数和0
正数,则表⽰该cookie会在maxAge秒之后⾃动失效。浏览器会将maxAge为正数的cookie持久化,即写到对应的cookie⽂件中(每个浏览器的
存储位置是不⼀样的)。⽆论客户关闭了浏览器还是电脑,只要在maxAge秒之前,该cookie仍然有效。如下设置cookie永久有效:
session超时时间配置
当maxAge为负数,则表⽰该cookie只是⼀个临时的cookie,不会被持久化,仅在浏览器窗⼝或本窗⼝打开⼦窗⼝时有效,关闭浏览器后⽴即失
效。
但maxAge为0时,⽴即删除cookie
session失效时间
session的过期时间是从session不活动的时候开始计算,如果session⼀直活动,session就总不会过期,从该Session未被访问,开始计时;⼀旦
Session被访问,计时清0;session超时时间设置为0则session失效,设置正数则在过了多久还没有访问为失效。
Shiro中的关系
在⽤shiro做登录的时候,登录超时是⼀个很头疼的问题。在没有配置sessionManager时,如下这个:
sessionManager
session的超时时间通过t控制,如下:
sesiontimeout
如果有配置sessionManager的话,则t失去了控制的能⼒,只能通过
balSessionTimeout来控制超时时间。
总结⼀下:没有配置cookie中sessionid的超时时间,sessionid的超时时间默认为session(即-1),session超时或关闭浏览器就找不到session
信息了。如果配置了cookie中sessionid的超时时间,则在关掉浏览器之后,只要session和sessionid没有过期,打开浏览器,还是可以取到对
应的session中的信息。但是就算是配置了cookie中sessionid的超时时间,但是如果session过期了且sessionid没有过期,通过sessionid也是
找不到session的。
如果配置了⽤redis作为session的存储容器的话。每次访问session都会执⾏更新redis中session的操作。每次访问session,会先访问cookie
中是否有sessionid,如果没有sessionid话,就当没有session的存在,要新建session的。
如果有sessionid存在,则先去本地sessions中找是否有对应的sessionid的session,如果有的话,就返回对应的session
如果没有的话,在去redis中查找对应sessionid的session,如果有的话就返回,没有就没有了。
这⾥有个点,就是redis中redisvalue的超时时间最好和session的超时时间⼀致。因为就算redisvalue的超时时间是1个⼩时,但是本地session
的超时时间是30分钟。在35分钟的时候,如果没有修改cookie中sessionid的时间,则sessionid在30分钟之后就不存在了,本地session也过
期了,因为没有sessionid,也找不到redis中的session,就不会返回session了。
就算是将cookie中sessionid的超时时间设置为了1⼩时,在第35分钟的时候访问,能从redis中取出session,但是取出来的session也是过期
的。因为session在存⼊redis的时候session会有开始时间和存活时间,取出来的时候已经超过了存活时间,是没有⽤的,session返回后会变为
null,session也是不存在的。
⽤redis保存session,不能解决session超时的问题,解决的是多个服务器的问题。不同的服务器登录时,⼀个浏览器cookie中的sessionid是⼀
样的,就算本地没有对应的session,但是redis中有,并且没有超时,就可以实现多个服务器都有登录状态了。
更多推荐
session timeout
发布评论