CAS的Session两秒挂掉?--解决退出后登录,页面刷新的问题

版本:Server 3.5.2
------------------------------------
现象:

登录成功后,马上点退出。

退出登录后,自动跳转到login页面,

慢一点,等个几秒钟,然后输入用户名,密码,提交

页面刷新了一下,仍然是login页面,

再次输入,正常进入。

[已证实,原始的cas的war包部署上,也有此问题]
------------------------------------
抓包,


HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Cache-Control: no-store
Set-Cookie: JSESSIONID=3911117B64346B50E24F36632C2419D7; Path=/cas
Location: http://10.0.103.137:8080/cas/login
Content-Length: 0
Date: Wed, 30 Oct 2013 03:37:07 GMT



发现重新设置了SessionID,正常登录时则不会设置。

怀疑是Session不存在了,导致后台重新创建Session,重新返回了login页面。
------------------------------------
一顿乱搜,搜到了几个文章,说到类似的现象:

http://jasig.275507.n4.nabble.com/Login-post-renew-true-when-does-it-get-302-vs-200-td2340424.html

https://groups.google.com/forum/#!topic/jasig-cas-user/Ba7el3kU8qQ

https://groups.google.com/forum/#!topic/jasig-cas-user/_GU2CW4LU0U
------------------------------------
找到org.jasig.cas.web.flow下的TerminateWebSessionListener.java,
这个类监听sessionStarted和sessionEnded事件,

加log后执行,

发现,访问login页面时是session start,登录成功后是session end,

也就是说,登录动作执行后这个session就被咔嚓掉了~~~

喀嚓掉,是使用
webSession.setMaxInactiveInterval(this.timeToDieInSeconds);实现的。

默认值是2,也就是两秒
private int timeToDieInSeconds = 2;
------------------------------------
执行logout时,只是让TGC无效,并没有重新创建Session。

(注意,前提是,登录成功后马上点退出。
如果等一会再点,会重新创建Session的,就无问题了)


所以,logout后自动跳转到login时,

浏览器带的JSessionID还是之前的那个,也就是打算被咔嚓的那个。

提交表单后,由于timeToDieInSeconds默认是两秒,手速慢一点,这个Session就已经不在了,所以重新创建Session,login页面刷新了。
--------------------------------------
配置timeToDieInSeconds这个值,可以在cas-servlet.xml

  <bean id="terminateWebSessionListener" class="org.jasig.cas.web.flow.TerminateWebSessionListener"
      p:serviceManagerUrl="${cas.securityContext.serviceProperties.service}" 
      p:timeToDieInSeconds="60"/>

设置 p:timeToDieInSeconds="60"这样既可,默认是没有这个参数的。

改成60秒后,试验,退出跳转到login页面,等几十秒再提交也正常登录了。

干脆改成1800秒,也就是30分钟,哦了~~
-------------------------------------
在web.xml中有个
  <session-config>
    <!-- Default to 5 minute session timeouts -->
    <session-timeout>5</session-timeout>
  </session-config>
Session超时时间是5分钟~~

不过,该处设置对本问题没有用,因为登录后Session是被主动干掉的,并不是超时。
-------------------------------------
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值