`

实现单用户登陆session先进先出(session踢出)

    博客分类:
  • Java
阅读更多

首先在系统增加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());
                }

 

分享到:
评论
2 楼 SpringJava 2013-10-26  
cilendeng 写道
应该用ConcurrentHashMap

,是的,涉及到并发的问题...
1 楼 cilendeng 2012-04-13  
应该用ConcurrentHashMap

相关推荐

    c#实现cookie和session的登陆实例

    在Web开发中,Cookie和Session是两种常见的用户身份验证机制,尤其在C#编程语言中,它们被广泛用于实现登录功能。本实例将探讨如何在C#环境下利用Cookie和Session来处理用户登录状态。 首先,我们要理解Cookie和...

    自己实现的spring-session

    自己实现spring-session,实现单点登陆的功能 使用filter拦截用户的请求,在filter中包装request,在request的包装类requestWrapper中,重写getSession(), 和getSession(boolean create)。自己实现httpSession,...

    基于session的单点登陆

    在这个项目中,我们采用基于Session的实现方式,结合JDBC和Servlet技术,以实现单用户的单点登录功能。 1. **Session机制**: Session是服务器端存储用户状态的一种机制。当用户成功登录后,服务器会创建一个...

    java中使用session模拟用户登陆

    以下是一个简单的使用Session实现用户登录的步骤: 1. **创建登录页面**:创建一个HTML或JSP页面,让用户输入用户名和密码。提交表单时,通常使用POST方法向服务器发送请求。 2. **验证用户**:在服务器端,接收...

    Session实现用户存储

    "Session实现用户存储"这个主题主要涉及到用户登录、购物车存储以及页面显示等关键环节。接下来,我们将详细探讨Session的工作原理,如何利用Session实现用户登录,以及在购物车场景中的应用。 1. Session的工作...

    session存用户名密码实现用户登录和退出

    综上所述,通过Session,我们可以方便地实现用户登录和退出功能,跟踪用户的会话状态。正确管理和使用Session对于提供安全、高效的服务至关重要。同时,结合其他安全措施,如密码加密、防止SQL注入等,可以进一步...

    session实现记录用户登录状态

    用session记录用户的登录状态 1.登录 2.登录成功后将此“已登录”状态保存。 3.实现“显示员工列表”功能。 4.当用户点击“显示员工列表”的时候,验证用户是否已登录,已登录继续显示员工列表,没有登录则跳转到...

    监听器显示登陆用户列表,并实现踢人功能

    在本主题中,我们将深入探讨如何利用`HttpSessionAttributeListener`来实现显示登录用户列表以及踢人功能。 `HttpSessionAttributeListener`是Servlet规范定义的一种监听器接口,它允许我们监听HTTP会话中的属性...

    javaWeb_Session(实现用户一段时间自动登录)

    JavaWeb中的Session技术是Web开发中的重要概念,主要用于在服务器端保持用户状态,尤其是在用户登录后,实现用户在一段时间内的自动登录功能。本篇将详细解释Session的工作原理、配置及其实现用户自动登录的机制。 ...

    ssm+redis 实现session共享

    SSM+Redis 实现Session共享是现代Web应用中常见的技术组合,主要目的是在分布式系统中保持用户Session的一致性。SSM是指Spring、Spring MVC和MyBatis这三大Java Web开发框架的组合,而Redis则是一种高性能的键值存储...

    Springboot实现多服务器session共享

    Springboot实现多服务器session共享 Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是...

    .net C# 利用session控制用户重复登录及统计在线用户数解决方案

    如果同一用户再次尝试登录,检查`Session`中的登录状态,如果已登录,则拒绝此次登录请求,给出相应提示。 为了统计在线用户数,我们需要维护一个计数器。每当有新用户登录,增加计数器;而当用户退出或`Session`...

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...

    使用session保持登陆状态

    每当客户端请求服务器时,都会将这个session ID一并发送回去,这样服务器就能识别出请求来自哪个用户,从而实现状态保持。 在"loginDemo"这个示例中,我们可能看到以下几个关键步骤: 1. **用户登录**:用户输入...

    tomcat-redis-session-manager实现session共享 配置文件

    "tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的Session共享。本篇文章将深入探讨这个话题,包括它的原理、配置以及实际应用。 **一、Session...

    session实验

    服务器通过检查这个ID来识别出特定的用户,从而获取并维护用户的会话信息,如登录状态、购物车内容等。 实验"session实验"可能涵盖了以下几个关键知识点: 1. **Session的创建与销毁**:实验可能涉及到如何在...

    SpringBoot+MyBatis+SpringSession+Redis实现session共享及单点登录

    SpringBoot+MyBatis+SpringSession+Redis实现session共享及单点登录开发实例

    spring session实现session共享

    2. **Session Replication**: Spring Session 实现了Session的复制和同步,确保无论用户连接到哪个服务器,都能获取到正确的Session状态。 3. **Store Backend**: Spring Session 可以配置多种存储后端,如Redis、...

    php实现主界面登陆 退出session

    一旦用户成功登录,你可以启动一个新的会话,并将用户的ID或其他标识符存储在`$_SESSION`全局变量中,以便后续页面可以识别用户的身份。例如: ```php session_start(); $_SESSION['user_id'] = $user['id']; ``` ...

    javaweb用户验证码登录session例子

    在Java Web开发中,用户登录验证是不可或缺的一部分,而在这个"javaweb用户验证码登录session例子"中,我们将深入探讨如何结合验证码、用户密码以及Session技术来实现安全的登录过程。Session是Web应用中用于跟踪...

Global site tag (gtag.js) - Google Analytics