[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

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

上一篇:[整理]CAS单点登录,服务端和客户端验证流程,抓包分析,带代码简单分析
下一篇:[备忘]VB6字符串编码,转换

添加日期:2013/10/31 18:02:54 快速返回   返回列表 阅读12837次
版本: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是被主动干掉的,并不是超时。
-------------------------------------
 

评论 COMMENTS
guest969926525
2015/1/9 13:57:45
时间设置太长对cas服务端有没有影响
guest969928200
2015/1/9 15:50:49
感觉session对cas服务端来说,用处不大,它主要通过cookie来验证。所以它登录成功就把session咔嚓了。仅记录一下解决过程,供参考。

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved