社区
Web 开发
帖子详情
怎样取得服务器中的所有session
victor_sun
2005-06-13 08:40:08
由于工作需要,我将用户信息放置在session中,我又一个模块是想取得所有同时在线用户的信息,所以小弟须取得服务器端所有的session,然后取得所有的在线用户的信息,不知各位大侠可否帮忙,不胜感激。
...全文
1480
14
打赏
收藏
怎样取得服务器中的所有session
由于工作需要,我将用户信息放置在session中,我又一个模块是想取得所有同时在线用户的信息,所以小弟须取得服务器端所有的session,然后取得所有的在线用户的信息,不知各位大侠可否帮忙,不胜感激。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
帮你顶
java获取所有
session
_Java通过遍历
session
Id获取
服务器
所有会话
session
Servlet2.1之后不支持
Session
Context里面get
Session
(String id)方法,也不存在遍历所有会话
Session
的方法。但是,我们可以通过Http
Session
Listener监听器和全局静态map自己实现一个
Session
Context,然后用
Session
Context管理一份
服务器
所有会话的
Session
。1.web.xml添加一个监听器listener.My...
应用
服务器
集群的
session
管理-多台
服务器
共享
session
问题
应用
服务器
集群的
session
管理:这是我在一本网站技术架构分析的书上看到的。这一章主要写在高可用架构设计之下服务无状态这一特性下怎么管理会话(
session
)。以下是几例解决方案(示例图为转载图片): 1.
session
复制
session
复制是早期企业应用系统使用比较多的一种
服务器
集群
Session
管理机制。应用
服务器
开启Web容器的的
Session
复制功能,在集群
中
的几台
服务器
之间同...
服务器
session
丢失问题
最近多个客户的网站出现同样的问题,就是后台登陆不上。网站代码的实现方式都是一样的,经过追踪,发现
服务器
返回的
session
id功能客户端返回的不一样,第二次才是
服务器
第一次返回的。
Session
又称为会话状态,是Web系统
中
最常用的状态,用于维护和当前浏览器实例相关的一些信息。我们控制用户去权限
中
经常用到
Session
来存储用户状态,这篇文章会讲下
Session
的存储方式、
服务器
端
Session
、客户端
Session
和Cookie的区别
一般大型互联公司的网站都是有一个个独立的频道所组成的,例如我们常用的百度,会有百度搜索,百度音乐,百度百科等等,我相信他们不会把这些不同频道都给一个开发团队完成,应该每个频道都是一个独立开发团队,因为每个频道的应用的都是独立的web应用,那么就存在一个跨站点的
session
同步的问题,跨站点的登录可以使用单点登录的(SSO)的解决方案,但是不管什么解决方案,跨站点的
session
共享任然是逃避不了的问题。因为
session
是与用户相关的,在用户之前访问的每一个页面都有可能创建了会话。
不同应用
服务器
,
session
怎么共享?
为什么会有
session
共享的问题? 原因是把应用部署在不同的
服务器
上面产生出来的 如何解决? 主要可以考虑下面几个方法,每个方法都有优缺点,具体实施时根据业务选择: 1.通过数据库mysql共享
session
a.采用一台专门的mysql
服务器
来存储所有的
session
信息。 用户访问随机的web
服务器
时,会去这个专门的数据库
服务器
check一下
session
的情况,以达到
session
同步的...
Web 开发
81,091
社区成员
341,718
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章