首先在系统增加sessionListener 来监听session 并做并做session保存 创建Class OnlineUserListener implements HttpSessionListener
implements HttpSessionListener 需要实现两个方法:
一个是 sessionCreated session的创建事件;
一个是sessionDestroyed session的销毁事件;
以下是代码:
public static HashMap sessionMap = new HashMap();
public void sessionCreated(HttpSessionEvent event) {
// TODO Auto-generated method stub
HttpSession session = event.getSession();
// 初始化当前session
sessionMap.put(session.getId(), session);
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
// 判断当前session user是否有值
if (session.getAttribute("user") != null
&& session.getAttribute("user").toString().length() > 0) {
// session销毁清空map 更新map
sessionMap.remove(session.getAttribute("user").toString());
session.invalidate();
}
}
需要在web.xml增加监听
<listener>
<listener-class>com.test.demo.OnlineUserListener</listener-class>
</listener>
public static HashMap sessionMap = new HashMap(); 全局 静态的map 保存的key=sessionId value=session 当前的会话ID是一致的所用使用sessionID做key 故可以在我们的action 或servlet 里面 根据当前sessionID 替换为当前用户登录的user 对象 故当前用户登录时,可通过在map中寻找值来判断当前用户是否已在系统中; 一下是单用户登录跟踢出的操作代码:
String username = request.getParameter("username");
//String password = request.getParameter("password");
HttpSession session = request.getSession();
if (OnlineUserListener.sessionMap.get(username.trim()) != null
&& OnlineUserListener.sessionMap.get(username.trim())
.toString().length() > 0) {
// 当前用户已经在线 删除用户
HttpSession sessionold = (HttpSession) OnlineUserListener.sessionMap.get(username.trim());
// 注销已在线用户session
sessionold.invalidate();
OnlineUserListener.sessionMap.remove(username.trim());
// 清除已在线用户,更新map key 当前用户 value session对象
OnlineUserListener.sessionMap.put(username.trim(), session);
OnlineUserListener.sessionMap.remove(session.getId());
} else {
// 根据当前sessionid 取session对象。 更新map key=用户名 value=session对象 删除map
// key= sessionid
OnlineUserListener.sessionMap.get(session.getId());
OnlineUserListener.sessionMap.put(username.trim(),OnlineUserListener.sessionMap.get(session.getId()));
OnlineUserListener.sessionMap.remove(session.getId());
}