首先在系统增加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());
}
分享到:
相关推荐
在Web开发中,Cookie和Session是两种常见的用户身份验证机制,尤其在C#编程语言中,它们被广泛用于实现登录功能。本实例将探讨如何在C#环境下利用Cookie和Session来处理用户登录状态。 首先,我们要理解Cookie和...
自己实现spring-session,实现单点登陆的功能 使用filter拦截用户的请求,在filter中包装request,在request的包装类requestWrapper中,重写getSession(), 和getSession(boolean create)。自己实现httpSession,...
在这个项目中,我们采用基于Session的实现方式,结合JDBC和Servlet技术,以实现单用户的单点登录功能。 1. **Session机制**: Session是服务器端存储用户状态的一种机制。当用户成功登录后,服务器会创建一个...
以下是一个简单的使用Session实现用户登录的步骤: 1. **创建登录页面**:创建一个HTML或JSP页面,让用户输入用户名和密码。提交表单时,通常使用POST方法向服务器发送请求。 2. **验证用户**:在服务器端,接收...
"Session实现用户存储"这个主题主要涉及到用户登录、购物车存储以及页面显示等关键环节。接下来,我们将详细探讨Session的工作原理,如何利用Session实现用户登录,以及在购物车场景中的应用。 1. Session的工作...
综上所述,通过Session,我们可以方便地实现用户登录和退出功能,跟踪用户的会话状态。正确管理和使用Session对于提供安全、高效的服务至关重要。同时,结合其他安全措施,如密码加密、防止SQL注入等,可以进一步...
用session记录用户的登录状态 1.登录 2.登录成功后将此“已登录”状态保存。 3.实现“显示员工列表”功能。 4.当用户点击“显示员工列表”的时候,验证用户是否已登录,已登录继续显示员工列表,没有登录则跳转到...
在本主题中,我们将深入探讨如何利用`HttpSessionAttributeListener`来实现显示登录用户列表以及踢人功能。 `HttpSessionAttributeListener`是Servlet规范定义的一种监听器接口,它允许我们监听HTTP会话中的属性...
JavaWeb中的Session技术是Web开发中的重要概念,主要用于在服务器端保持用户状态,尤其是在用户登录后,实现用户在一段时间内的自动登录功能。本篇将详细解释Session的工作原理、配置及其实现用户自动登录的机制。 ...
SSM+Redis 实现Session共享是现代Web应用中常见的技术组合,主要目的是在分布式系统中保持用户Session的一致性。SSM是指Spring、Spring MVC和MyBatis这三大Java Web开发框架的组合,而Redis则是一种高性能的键值存储...
Springboot实现多服务器session共享 Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是...
如果同一用户再次尝试登录,检查`Session`中的登录状态,如果已登录,则拒绝此次登录请求,给出相应提示。 为了统计在线用户数,我们需要维护一个计数器。每当有新用户登录,增加计数器;而当用户退出或`Session`...
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
每当客户端请求服务器时,都会将这个session ID一并发送回去,这样服务器就能识别出请求来自哪个用户,从而实现状态保持。 在"loginDemo"这个示例中,我们可能看到以下几个关键步骤: 1. **用户登录**:用户输入...
"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的Session共享。本篇文章将深入探讨这个话题,包括它的原理、配置以及实际应用。 **一、Session...
服务器通过检查这个ID来识别出特定的用户,从而获取并维护用户的会话信息,如登录状态、购物车内容等。 实验"session实验"可能涵盖了以下几个关键知识点: 1. **Session的创建与销毁**:实验可能涉及到如何在...
SpringBoot+MyBatis+SpringSession+Redis实现session共享及单点登录开发实例
2. **Session Replication**: Spring Session 实现了Session的复制和同步,确保无论用户连接到哪个服务器,都能获取到正确的Session状态。 3. **Store Backend**: Spring Session 可以配置多种存储后端,如Redis、...
一旦用户成功登录,你可以启动一个新的会话,并将用户的ID或其他标识符存储在`$_SESSION`全局变量中,以便后续页面可以识别用户的身份。例如: ```php session_start(); $_SESSION['user_id'] = $user['id']; ``` ...
在Java Web开发中,用户登录验证是不可或缺的一部分,而在这个"javaweb用户验证码登录session例子"中,我们将深入探讨如何结合验证码、用户密码以及Session技术来实现安全的登录过程。Session是Web应用中用于跟踪...