如何控制所有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()方法 做移除操作时 要抓一个运行时异常
否则有可能报
空指针========= 个人愚见 只供参考 ===========