Java通过遍历sessionId获取服务器所有会话session

摘要:
在Servlet 2.1之后,SessionContext中的getSession方法不受支持,并且没有方法遍历所有会话会话(=Null){mymap.remove;}}publicstaticsynchronizedHttpSessionSession{ifeturnnull;returnmymap.get;}3。任何会话的创建和删除都使用其自己的SessionContext:MySessionListenerpublicclassMySessionListenersimplementsHttpSessionListener{publicvoisessionCreated{MySessionContext.AddSession;}publicvoicessionDestroyed{HttpSessionSessionSession=httpSession Event.getSession();MySessionContext.DelSession;}}}然后可以通过遍历SessionContext。你可以定期清理过时的会话!

  Servlet2.1之后不支持SessionContext里面getSession(String id)方法,也不存在遍历所有会话Session的方法。但是,我们可以通过HttpSessionListener监听器和全局静态map自己实现一个SessionContext,然后用SessionContext管理一份服务器所有会话的Session。

1.web.xml添加一个监听器

<listener>
    <listener-class>listener.MySessionListener</listener-class>
</listener>

2.定义一个SessionContext:MySessionContext

public class MySessionContext {
private static HashMap mymap = new HashMap();
public static synchronized void AddSession(HttpSession session) { if (session != null) { mymap.put(session.getId(), session); } }
public static synchronized void DelSession(HttpSession session) { if (session != null) { mymap.remove(session.getId()); } }
public static synchronized HttpSession getSession(String session_id) { if (session_id == null) return null; return (HttpSession) mymap.get(session_id); } }

3.任何Session的创建和删除都用自己的SessionContext管理起来:MySessionListener

public class MySessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent httpSessionEvent) {   MySessionContext.AddSession(httpSessionEvent.getSession()); }
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); MySessionContext.DelSession(session); } }

  然后就实现了任何时候都可以通过遍历SessionContext而得到所有会话的Session。

  有什么用呢?你可以定期清理过时的Session呢!(注意,Session超时了以及你换地方登陆了并不会删除用户的Session,其只是Session对应的时间戳让你无法再使用对应的Session,或者是浏览器的Cookie丢失了原先浏览器里面存在的SessionId而已,因此定时清理Session也会让服务器内存压力小很多)。

免责声明:文章转载自《Java通过遍历sessionId获取服务器所有会话session》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java将任意类型的Object对象转换为相应的实体对象JAVA系列笔记十五之intellj idea下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网络通信框架Apache MINA

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的TCP/UDP 应用程序开发、串口通讯程序。Mina 的应用层:一个...

Fake SQL Tuning, v$session, etc...

随便起了个名字,因为不知道叫啥好。主要是想把最近遇到的一个事情简单记录下,仅此而已。为啥叫Fake SQL Tuning, 自然不是真正地谈SQL优化,因为我也说不出来啥玩意,毕竟SQL优化不是简单的一两句话就可以说出个所以然的。 最近遇到个问题,我负责维护的一个产品的用户说他们有一个process老是跑不完,卡在那里。这个产品前端用PB做,中间部分计算引...

windows下遍历文件夹下的文件

#include <io.h>#include <stdio.h>#include <iostream>using namespace std;int ReadStationID(char(*id)[50]){ struct _finddata_t c_file; long hFile; char *p = NULL;...

Tomcat7基于Redis的Session共享实战一

本文主要介绍如何使用redis对tomcat7的session进行托管。 1、安装Redisredis安装比较简单,此处略过。 2、配置两个Tomcat在本机上配置两个Tomcat,分别为tomcat7-8081、tomcat7-8082。 编制两个index.jsp页面,分别放入tomcat7-8081webappsROOT、tomcat7-8082we...

flink常用命令

1.查看flink任务 /var/lib/hadoop-hdfs/flink/bin/flink  list 2.停止flink任务 /var/lib/hadoop-hdfs/flink/bin/flink  cancel  job Id 3.启动一个yarn session bin/yarn-session.sh -d -s 3 -jm 2048 -tm...

ANDROID窗体管理服务实现机制和架构分析

 一、功能     窗体管理是ANDROID框架一个重要部分,主要包含例如以下功能:    (1)Z-ordered的维护   (2)窗体的创建、销毁   (3)窗体的绘制、布局    (4)Token管理,AppToken    (5)活动窗体管理(FocusWindow)    (6)活动应用管理(FocusAPP)    (7)输入法管理  ...