|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-10-20
软件环境:
标准的servlet容器 配置文件: 错误提示信息: 你的分析: 对于通常的提供在线人员列表的网站来讲,如果是在Java环境下,那么一般是通过listener来监听session的创建销毁、attribute的增加和减少等事件来完成的,这儿有一个问题,就是比如一个用户的session过期后将期从在线列表中移除,是通过容器自己的管理机制在判定session失效后产生attributeRemoved事件,而通知我们的列表将此用户删除的。。。。 那么有什么办法通过编程的手段来控制某个指定在线用户的session失效? ========== 应用场景: 前提,一个帐号不能同时多处登录,即若此帐号已经处于登录状态,则不准其再次登陆。 监控当前在线人员,如果某人报告其为非法错误退出,(比如直接关闭IE而不是通过退出按钮登出系统的),监控人员可以将此用户仍处于有效期的session僵尸清除,以使其正常登陆系统。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-10-20
或者说我已知一个sessionID,有什么办法将代表的session强制失效呢?
|
|
| 返回顶楼 | |
|
最后更新时间:2004-10-21
把session设成空
[code:1]session.setAttribute("sesUser","");[/code:1] |
|
| 返回顶楼 | |
|
最后更新时间:2004-10-21
sun 写道 把session设成空
[code:1]session.setAttribute("sesUser","");[/code:1] 不对吧,这样只是“我”主动属于自己的那个session中的sesUser置空,而不是站在第三者(监控者)的角度对网站内的所有session进行操作管理,比如监控者将你的session强制清空这样的操作 |
|
| 返回顶楼 | |
|
最后更新时间:2004-10-22
HttpSession 有一个方法invalidate, 你尝试一下。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-10-22
用invalidate()是可行的。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-10-22
凤舞凰扬 写道 HttpSession 有一个方法invalidate, 你尝试一下。
可能大家对我的意思有些误会了 我详细说一下: 在我的case中,比如监控人员在看网站的在线用户列表(在线用户有A、B、C等),此时出于某种原因,要将在线用户A强制离线。 即 第一步,定位A的session 第二步,将此session终止 第三步,刷新在线列表,此时用户A将从在线列表中消失 你刚才说的是第二步的方法,也就是在我已经找出这个用户所对应的session后,将此session 终止。但我现在的问题是不知道如何实现第一步。。。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-10-22
做一个application级别的对象
做listener,在session创立的时候加入到对象里,删除的时候删除 .... HttpSessionContext本来有这个功能的,可惜被废了 -----只是想法,没实践过 |
|
| 返回顶楼 | |
|
最后更新时间:2004-10-23
HttpSessionBindingListener.valueBound(HttpSessionBindingEvent)
HttpSessionBindingListener.valueUnbound(HttpSessionBindingEvent) |
|
| 返回顶楼 | |
|
最后更新时间:2004-10-23
好像没办法从一个session去干掉另一个session吧
不过ruby的case是通过这样的方式实现的,在一个ServletContext中保存一个在线用户Id Collection的attribute吧,每一次通过检查Collection里是否有保存该用户Id来判断用户在线,这样就可以强制把该用户卡掉。 为了保证此动能的正常实现,还必须实现一个HttpSessionBindingListener来自动更新用户Id Collection |
|
| 返回顶楼 | |










