win7驱动包下载-lol一直崩溃

session timeout
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