日期:2014-05-18  浏览次数:20670 次

如何控制所有Session
最近在做一个项目的后台管理。

需求中,要求管理员可以管理所有用户的Session

可以控制任何一个用户的Session失效!

请大家给个思路。谢谢!

------解决方案--------------------
主要用下面这两个方法就可以实现了
session.getValueNames();//获得session中所有的 值名称 返回一个Object数组
session.removeAttribute(session名);//移除session 参数为 String 类型
用户表
userid username password
1 李四 111111
2 张三 222222
3 王二 333333

 
李四登录 session.setAttribute("1",lisiuser);
张三登录 session.setAttribute("1",zhangsanuser);

 1 表示userid 
 user 表示 用户对象
Object[] obj= session.getValueNames();//等到说有登录的用户ID 的Object数组
for (int i = 0; i < obj.length; i++) {
System.out.println("obj["+i+"]--->"+obj[i]);
}
输出结果:
 obj[0]----->1
 obj[1]----->2
可能还有别的不用管 我们需要的已经得到了 

根据这些登录用户的ID 显示登录信息

管理员管理登录用户界面:
登录用户编号 登录用户名 注销 //显示界面表格头

1 李四 注销 //显示内容 注销 可以做一个超链接 参数为用户id(也就是 session值名字)
2 张三 注销
 
操练到处理action 类(如果你不用 struts action 就用servlet代替吧)
 调用 session.removeAttribute(userid)方法移除 这个登录用户
userid 表示链接过来的参数

思路就是这样 文笔不好 lz慢慢领会 主要是那两个方法运用好了就OK了

  

------解决方案--------------------
严重同意ls 的,可惜我来晚啦,5555
------解决方案--------------------
应该是使用HttpSessionListener,新建一个类实现HttpSessionListener接口并在web.xml中配置好


然后在这个类中的sessionCreated方法中将Session对象保存到一个静态列表中,在sessionDestroyed方法中移除之


在管理页面就可以遍历静态列表取得所有用户的Session对象
------解决方案--------------------
应该是使用HttpSessionListener
==============================
楼上大哥 难到只有 监听器 可以做到吗 ?!!

用监听是一种好方法

我在写程序时总是避免 过多使用静态变量 原因大家都知道静态变量太占资源

如果用静态列表存储session对象 那不等于 session对象在内存中有两
这就出现了冗余, 十万个用户登录 ,就要存储二十万个session对象


sessionDestroyed()方法 做移除操作时 要抓一个运行时异常 
否则有可能报空指针


========= 个人愚见 只供参考 ===========