论坛首页 Java版

『提问』WEB环境下如何强制让指定的session失效(过期)?

浏览 4237 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2004-10-20
软件环境:
标准的servlet容器
配置文件:

错误提示信息:

你的分析:
对于通常的提供在线人员列表的网站来讲,如果是在Java环境下,那么一般是通过listener来监听session的创建销毁、attribute的增加和减少等事件来完成的,这儿有一个问题,就是比如一个用户的session过期后将期从在线列表中移除,是通过容器自己的管理机制在判定session失效后产生attributeRemoved事件,而通知我们的列表将此用户删除的。。。。

那么有什么办法通过编程的手段来控制某个指定在线用户的session失效?

==========
应用场景:
前提,一个帐号不能同时多处登录,即若此帐号已经处于登录状态,则不准其再次登陆。
    监控当前在线人员,如果某人报告其为非法错误退出,(比如直接关闭IE而不是通过退出按钮登出系统的),监控人员可以将此用户仍处于有效期的session僵尸清除,以使其正常登陆系统。
   
最后更新时间:2004-10-20
或者说我已知一个sessionID,有什么办法将代表的session强制失效呢?
   
0 请登录后投票
最后更新时间:2004-10-21
把session设成空
[code:1]session.setAttribute("sesUser","");[/code:1]
   
0 请登录后投票
最后更新时间:2004-10-21
sun 写道
把session设成空
[code:1]session.setAttribute("sesUser","");[/code:1]

不对吧,这样只是“我”主动属于自己的那个session中的sesUser置空,而不是站在第三者(监控者)的角度对网站内的所有session进行操作管理,比如监控者将你的session强制清空这样的操作
   
0 请登录后投票
最后更新时间:2004-10-22
HttpSession 有一个方法invalidate, 你尝试一下。
   
0 请登录后投票
最后更新时间:2004-10-22
用invalidate()是可行的。
   
0 请登录后投票
最后更新时间:2004-10-22
凤舞凰扬 写道
HttpSession 有一个方法invalidate, 你尝试一下。

可能大家对我的意思有些误会了
我详细说一下:
  在我的case中,比如监控人员在看网站的在线用户列表(在线用户有A、B、C等),此时出于某种原因,要将在线用户A强制离线。
  即
  第一步,定位A的session
   第二步,将此session终止
  第三步,刷新在线列表,此时用户A将从在线列表中消失

你刚才说的是第二步的方法,也就是在我已经找出这个用户所对应的session后,将此session 终止。但我现在的问题是不知道如何实现第一步。。。
   
0 请登录后投票
最后更新时间:2004-10-22
做一个application级别的对象

做listener,在session创立的时候加入到对象里,删除的时候删除

....
HttpSessionContext本来有这个功能的,可惜被废了

-----只是想法,没实践过
   
0 请登录后投票
最后更新时间:2004-10-23
HttpSessionBindingListener.valueBound(HttpSessionBindingEvent)
HttpSessionBindingListener.valueUnbound(HttpSessionBindingEvent)
   
0 请登录后投票
最后更新时间:2004-10-23
好像没办法从一个session去干掉另一个session吧

不过ruby的case是通过这样的方式实现的,在一个ServletContext中保存一个在线用户Id Collection的attribute吧,每一次通过检查Collection里是否有保存该用户Id来判断用户在线,这样就可以强制把该用户卡掉。
为了保证此动能的正常实现,还必须实现一个HttpSessionBindingListener来自动更新用户Id Collection
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐