`

控制用户session

阅读更多
发现对于登录问题的解决都说用session监听,但是没有人写出示例代码,今天写了一个,希望对大家有所帮助.
解决同名用户登录的问题,类似QQ,即同名用户第二次登录,第一次登录的用户就掉线.
SessionListener.java监听session的类,部署于/App/WEB-INF/classes/com/test下(其中App为你的应用程序目录)
package com.test;
import javax.servlet.http.*;
import java.util.*;

public class SessionListener implements HttpSessionListener{
    private static HashMap hUserName = new HashMap();//保存sessionID和username的映射
    /**以下是实现HttpSessionListener中的方法**/
    public void sessionCreated(HttpSessionEvent se){
    }
   
    public void sessionDestroyed(HttpSessionEvent se){
        hUserName.remove( se.getSession().getId() );
    }
    /*
     * isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法
     * @param sUserName String-登录的用户名称
     * @return boolean-该用户是否已经登录过的标志
     */
    public static boolean isAlreadyEnter(HttpSession session,String sUserName){
        boolean flag = false;
        if(hUserName.containsValue(sUserName)){//如果该用户已经登录过,则使上次登录的用户掉线(依据使用户名是否在hUserName中)
            flag = true;
            //遍历原来的hUserName,删除原用户名对应的sessionID(即删除原来的sessionID和username)
            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(sUserName) ){
                    hUserName.remove(key);
                }
            }
            hUserName.put( session.getId(),sUserName );//添加现在的sessionID和username
            System.out.println("hUserName = " + hUserName);
        }
        else{//如果该用户没登录过,直接添加现在的sessionID和username
            flag = false;
            hUserName.put( session.getId(),sUserName );
            System.out.println("hUserName = " + hUserName);
        }
        return flag;
    }
    /*
     * isOnline-用于判断用户是否在线
     * @param session HttpSession-登录的用户名称
     * @return boolean-该用户是否在线的标志
     */
    public static boolean isOnline(HttpSession session){
        boolean flag = true;
        if( hUserName.containsKey( session.getId() ) ){
            flag = true;
        }
        else{
            flag = false;
        }
        return flag;
    }
}

web.xml部署于/App/WEB-INF下
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">

<web-app>

<listener>
<listener-class>
com.inspirer.dbmp.SessionListener
</listener-class>
</listener>

</web-app>
应用部分
1.在你的登录验证时,调用SessionListener.isAlreadyEnter(session,"admin")
既可以判断该用户名的用户是否登录过,又可以使上次登录的用户掉线
2.其他页面调用SessionListener.isOnline(session),可以判断该用户是否在线.

分享到:
评论

相关推荐

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

    总结来说,`.NET C# 利用session控制用户重复登录及统计在线用户数解决方案`主要是: 1. 用户登录时,将用户信息存入`Session`,同时设置登录状态和计数器。 2. 检查`Session`中的登录状态以防止重复登录。 3. 使用...

    .net C# 通过session控制重复登录及在线用户统计

    在这个场景中,我们关注的是如何利用`Session`来控制用户的重复登录以及统计在线用户数量。下面将详细介绍这两个核心知识点。 1. **重复登录控制**: 当用户成功登录后,通常会将用户的一些关键信息(如ID、用户名...

    利用Session验证是否用户登录

    Session是服务器端的一种存储机制,用于跟踪用户状态,尤其在用户登录后,通过Session可以判断用户是否已登录,从而实现权限控制。 首先,我们要理解如何使用Session在页面间传递值。当用户在登录页面输入用户名和...

    java中使用session模拟用户登陆

    在Java Web开发中,Session是服务器端用于跟踪用户状态的一种机制。当用户通过用户名和密码登录系统后,服务器需要一种方式来识别这个已验证的用户,以便在后续的请求中提供个性化的服务,例如访问权限控制。这时,...

    php中精确控制session超时时间

    在PHP编程中,控制session的超时时间是一个重要的议题,特别是在需要精确管理用户登录状态的场景下。PHP的默认session超时时间为1440秒(即24分钟),但有时候开发者可能需要自定义更短或更长的超时时间以满足特定...

    windows多用户多session下使用Mutex进行同步控制源代码

    在Windows操作系统环境中,多用户多会话(Multi-User Multi-Session)的环境常常出现在服务器或者桌面虚拟化场景中,每个用户登录系统后都会创建一个独立的会话。在这种环境下,多个用户可能同时运行相同的应用程序...

    java session判断用户登录时间和点击页面次数

    在Web应用中,Servlet常被用作控制器,负责接收、处理和转发用户请求。 **1. 用户登录时间记录** 当用户成功登录后,我们需要记录下登录的具体时间。这可以通过以下步骤实现: 1. 在用户验证通过(例如,用户名和...

    session控制用户名

    标题“session控制用户名”和描述“session记录用户名,判断用户名登录”都指向了使用Session来验证和管理用户登录状态的核心概念。这里,我们将深入探讨Session的工作原理、如何记录和判断用户名,以及在实际开发中...

    微信小程序用户登录、注册、SESSION同步、交互等

    - **设置SESSION**:在SpringMVC控制器中,可以使用`HttpSession`对象来创建和管理SESSION,例如`session.setAttribute("key", value);` - **读取SESSION**:在其他方法中,可以通过`session.getAttribute("key")`...

    struts2_session_权限检查并控制重复登录源码

    - 重复登录控制:当检测到同一用户在另一处尝试登录时,触发注销逻辑,清理旧Session,并可能向旧会话发送注销通知。 - 会话超时设置:可能会包含对Session生命周期的管理,例如设置合理的超时时间,防止长时间无...

    asp.net下session的使用

    ASP.NET中的Session是Web...综上所述,ASP.NET中的Session是维持用户状态的关键工具,它在登录验证、导航控制和其他多种场景中都发挥着重要作用。在实际应用中,开发者应合理运用Session,并注意其安全性和性能影响。

    在线人员 ajax聊天室 关闭浏览器和登出控制使session失效

    【关闭浏览器和登出控制使session失效】是Web应用中常见的用户会话管理策略。Session是服务器端用来跟踪用户状态的一种方式,当用户登录后,服务器会创建一个session,并将用户信息存储在其中。当用户关闭浏览器或...

    .net core 6 使用session进行验证

    在控制器或视图模型中,我们可以使用`HttpContext.Session`来读写Session数据。例如,当用户成功登录后,我们可以将认证信息(如用户ID)存入Session: ```csharp HttpContext.Session.SetInt32("UserId", ...

    PHP会话控制SESSION与COOKIE

    当用户访问网站时,服务器为该用户创建一个唯一的会话ID(session_id),并将其存储在服务器的内存中。这个ID通过COOKIE发送给用户的浏览器,之后浏览器在每次请求时都会带上这个ID,使得服务器能够识别并跟踪特定...

    退出页面自动清除session技巧

    具体来说,可以在控制器(Controller)层处理Session的清除逻辑,而不是直接在JSP页面中编写相关代码。 #### 其他注意事项 除了上述介绍的方法之外,还有一些其他方面的注意事项: - **禁用缓存**:为了防止因...

    iframe 跨域访问session

    `session`通常用于存储用户登录状态等临时信息,而`cookie`则作为`session` ID的载体在客户端和服务器之间传递。当用户访问网站并登录后,服务器会设置一个`session`,并将对应的`session ID`保存在客户端的`cookie`...

    Java关于session的详细解释

    - **Session的优势**:相比于其他状态管理技术,Session能够提供更强大的功能,例如支持跨多个页面的数据共享,以及提供更高级的安全性控制。 #### 九、Session的注意事项 - **安全性**:Session ID应具有足够的...

    JAVA SESSION监听器

    总的来说,Java Session监听器是Web应用中不可或缺的一部分,它提供了一种透明且强大的方式来管理和优化Session的生命周期,同时也能帮助我们更好地理解和控制用户的在线行为。通过深入理解和熟练运用Session监听器...

    SpringSession+Redis实现Session共享案例

    - 在Spring MVC的控制器中,使用`@SessionAttributes`注解来声明需要在Session中存储的模型属性。 - 通过`HttpServletRequest`或`HttpSession`对象来访问和修改Session数据,如同在单服务器环境中一样。 5. **...

    session监听小例子

    2. 用户行为分析:记录用户Session的活跃时间、访问路径等,用于分析用户行为。 3. 资源管理:在Session销毁时释放占用的资源,避免内存泄漏。 4. 安全控制:检测异常的Session活动,如频繁登录尝试,及时采取安全...

Global site tag (gtag.js) - Google Analytics