怎样取得服务器中的所有session

victor_sun 2005-06-13 08:40:08
由于工作需要,我将用户信息放置在session中,我又一个模块是想取得所有同时在线用户的信息,所以小弟须取得服务器端所有的session,然后取得所有的在线用户的信息,不知各位大侠可否帮忙,不胜感激。
...全文
1480 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jybbh 2005-06-15
  • 打赏
  • 举报
回复
mark
tys1105 2005-06-15
  • 打赏
  • 举报
回复
同意minisun2000(天生不专一)楼主的说法。
zouzhejun 2005-06-15
  • 打赏
  • 举报
回复
关注一下
minisun2000 2005-06-15
  • 打赏
  • 举报
回复
又是统计在线用户的,给个例子你。
大体的思路是:用户列表用HashMap保存,其中key为SessionID,value为Session中设置的username(可以为其他)属性值;当在Session中添加username(可以为其他)属性的时候向用户列表中添加用户;Session失效或者删除Session的username(可以为其他)属性的时候在用户列表中删除该用户。
可以判断Session失效,但是对特殊情况:如客户端关闭浏览器等没有办法处理
package com.test;
import javax.servlet.http.*;
import java.util.*;
public class SessionListener implements HttpSessionListener,HttpSessionAttributeListener{
private static HashMap hUserName = new HashMap();//保存sessionID和username的映射
/**以下是实现HttpSessionListener中的方法**/
/*创建session时,什么都不做*/
public void sessionCreated(HttpSessionEvent se){
}
/*session失效时,删除列表中用户信息*/
public void sessionDestroyed(HttpSessionEvent se){
hUserName.remove( se.getSession().getId() );
}
/**以下是实现HttpSessionAttributeListener中的方法**/
/*调用session.setAttribute("username","****")时,添加用户信息到列表中*/
public void attributeAdded(HttpSessionBindingEvent se){
if(se.getName().equals("username")){
hUserName.put(se.getSession().getId(),se.getValue());
}
}
/*调用session.removeAttribute("username","****")时,删除列表中用户信息*/
public void attributeRemoved(HttpSessionBindingEvent se){
if(se.getName().equals("username")){
if(hUserName.containsValue(se.getValue())){
Iterator iter = hUserName.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
if( ( (String)val ).equals(se.getValue()) ){
hUserName.remove(key);
}
}
}
}
}
/*调用更改"username"属性值时同时更改列表中用户信息*/
public void attributeReplaced(HttpSessionBindingEvent se){
if(se.getName().equals("username")){
if(hUserName.containsValue(se.getValue())){
Iterator iter = hUserName.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
if( ( (String)val ).equals(se.getValue()) ){
hUserName.remove(key);
hUserName.put(key,se.getValue());
}
}
}
}
}
/*返回用户列表*/
public static HashMap getList(){
return hUserName;
}
}
在WEB-INF下面的web.xml中配置监听
<listener>
<listener-class>com.test.SessionListener</listener-class>
</listener>

ytcx_lt_82 2005-06-15
  • 打赏
  • 举报
回复
ding
yb1682003 2005-06-15
  • 打赏
  • 举报
回复
我建议保存在application中一个变量。用一个Map来保存,这样你不但可以知道有多少人在线,并且还可以知道此人是谁。
hadecsdn 2005-06-15
  • 打赏
  • 举报
回复
关注中...
lyneville 2005-06-15
  • 打赏
  • 举报
回复
dennisjl(dennis)实现的方法有个缺点,就是:如果客户浏览器不是正常途径退出的时候就……
fengyue2001 2005-06-15
  • 打赏
  • 举报
回复
dennisjl(dennis) 得方法好实现,但是统计的可能不会很准
King6860 2005-06-15
  • 打赏
  • 举报
回复
使用HttpSessionListener事件监听器即可,
当SESSION 注册的时候,把信息放进MAP 或者其他容器,
当SESSION 失效,删除,取的时候,直接取MAP。。

个人建议。。
良少 2005-06-15
  • 打赏
  • 举报
回复
使用HttpSessionListener事件监听器即可!
用它监听所有session的上线下线
liwenchao 2005-06-15
  • 打赏
  • 举报
回复
取得所有同时在线用户的信息不是用session,而是用application!
dennis 2005-06-15
  • 打赏
  • 举报
回复
想获得在线用户信息, 不能用你说的方法.
我是这样处理的: 用户一登录, 就在数据库中设置为已登录的标志, session无效时, 设置为"退出"标志. 然后通过查询数据库来判断一个用户是否已经登录.
hxc0906 2005-06-14
  • 打赏
  • 举报
回复
帮你顶

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧