`
weihong01267
  • 浏览: 51892 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

防止重复登录

    博客分类:
  • ssh
 
阅读更多

防止重复登陆的思路就是:判断session中用户的值(比如;用户名、用户id等)是否存在,如果存在,则提示用户此账户已登陆,类似QQ的重复登陆功能。

实现如下:(此类已经在项目中运行,代码拷贝至实际的项目,稍微修改即可)

①SessionListener,该listener实现 HttpSessionListener接口

 

  1.  import  javax.servlet.http.*;    
  2. import  java.util.*;   
  3.  
  4.  
  5. public  class  SessionListener  implements  HttpSessionListener{  
  6.    @SuppressWarnings("unchecked")  
  7. private  static  java.util.Hashtable  hUserName  =  new   Hashtable();  
  8.    public  void  sessionCreated(HttpSessionEvent  se){  
  9.          System.out.println( "客户端已连接服务器 --会话号为: " + se);  
  10.     }  
  11.  
  12.    public  void  sessionDestroyed(HttpSessionEvent  se){  
  13.            hUserName.remove(se.getSession());  
  14.            System.out.println( "用户会话已失效session -- " + se);  
  15.     }  
  16.  
  17.    @SuppressWarnings("unchecked")  
  18. public  synchronized  static  boolean  isLogined(HttpSession  session,String  user_id1,String user_name){//(踢掉先登陆者再抢)是否该帐户已经在使用Action调用  
  19.        boolean  flag  =   false;  
  20.        if(hUserName.containsKey(user_id1)){  
  21.                              flag  =   true;  
  22.                              HttpSession  vsession  =  (HttpSession)hUserName.get(user_id1);  
  23.                              try   {  
  24.                                  vsession.invalidate();//踢掉先登陆者  
  25.                                  System.out.println("用户 - " + user_name + " || 已存在 - " +session);  
  26.                                  System.out.println("用户 - " + user_name + " || 被挤掉了");  
  27.                              }  
  28.                              catch  (Exception   ex){}  
  29.                      }  
  30.        else{  
  31.                flag  =   false;  
  32.                  
  33.        }  
  34.        hUserName.remove(user_id1);  
  35.        hUserName.remove(user_name);  
  36.        if(flag==false){//如果没有登陆则在哈西表中记录  
  37.        hUserName.put(user_id1,session);  
  38.        System.out.println("用户已经登陆: - " + user_name + " || 会话号为: - " +session);  
  39.        }  
  40.        return   flag;  
  41.     }  

②登陆Action调用如下:

 

  1. public String userLogin() {  
  2.  
  3.         String username = "";  
  4.         String realname = "";  
  5.         try {  
  6.  
  7.             listAllUser = userService.userLogin(user.getUsername(), Password  
  8.                     .createPassword(getPassword()));  
  9.  
  10.         } catch (Exception e) {  
  11.             e.printStackTrace();  
  12.         }  
  13.         Iterator<OrderUser> rs = listAllUser.iterator();  
  14.         HttpSession session = ServletActionContext.getRequest().getSession();  
  15.         if (listAllUser.size() != 0) {  
  16.             while (rs.hasNext()) {  
  17.                 OrderUser user = rs.next();  
  18.                 session.setAttribute("username", user.getUsername().toString()  
  19.                         .trim());  
  20.                 session.setAttribute("realname", user.getName().toString()  
  21.                         .trim());  
  22.                 session.setAttribute("id", user.getId().toString().trim());  
  23.                 Timestamp d = new Timestamp(System.currentTimeMillis());  
  24.                 user.setLoginTime(d);  
  25.                 userService.update(user);  
  26.                 System.out.println("MD5验证4" 
  27.                         + Password.authenticatePassword(user.getPassword(),  
  28.                                 getPassword()));  
  29.                 username = user.getUsername().toString().trim();  
  30.                 realname = user.getName().toString().trim();  
  31.                 // 判断是否冻结账户  
  32.                 if (user.getStatus().equals("冻结")) {  
  33.                     return "dongjie";  
  34.                 }  
  35.                 // }else{  
  36.                 // return SUCCESS;  
  37.                 // }  
  38.  
  39.             }  
  40.               
  41.             boolean flag = SessionListener.isLogined(session, username,  
  42.                     realname);  
  43.               
  44.             if (flag == true) {  
  45.                 return "isloged";  
  46.             } else {  
  47.                 System.out.println("用户正常登陆");  
  48.             }  
  49.  
  50.             return SUCCESS;  
  51.         } else {  
  52.  
  53.             return INPUT;  
  54.         }  
  55.  
  56.     } 

③web.xml配置部分如下:

 

  1. <listener> 
  2.         <listener-class>com.yaxing.util.SessionListener</listener-class> 
  3.     </listener> 

④struts.xml配置部分如下:

 

  1. <action name="userLogin" class="userBean" method="userLogin"> 
  2.             <result name="success">/web/Index.html</result> 
  3.             <result name="input">/web/loginFailure.jsp</result> 
  4.             <result name="dongjie">/web/dongjie.jsp</result> 
  5.                     <result name="isloged">/web/loged.jsp</result> 
  6.         </action> 

⑤提示js 如下:

 

  1. <body> 
  2.     <script type="text/javascript"> 
  3.          alert("你的账号已经登录!");  
  4.           
  5.     </script> 
  6.     <%   
  7.         response.setHeader("refresh","0;URL = ../web/Index.html");    
  8.         %>   
  9.      
  10.   </body> 

 

本文出自 “幽灵柯南的技术blog” 博客,请务必保留此出处http://enetq.blog.51cto.com/479739/702256

分享到:
评论

相关推荐

    asp 防止重复登陆

    ### ASP防止重复登录知识点 #### 一、ASP与防止重复登录背景 在Web应用程序开发过程中,用户登录状态的管理是一项非常重要的任务。特别是在基于Active Server Pages (ASP) 的早期Web应用环境中,确保用户不会被...

    C#防用户重复登录的方法.NET

    如果检测到同一令牌的多个登录,服务器可吊销旧令牌并生成新的,防止重复登录。 3. **数据库锁定**:在用户登录时,系统可以在数据库中设置一个状态字段,表示用户当前已登录。如果检测到另一登录尝试,可以检查该...

    防止用户重复登录

    许多成熟的Web开发框架,如Spring Security、Django、Express.js等,都提供了防止重复登录的解决方案,开发者可以根据实际需求选择合适的方法和技术进行实现。 总结,防止用户重复登录是现代应用程序中一个重要的...

    .net解决了防止用户重复登陆,session超时

    综上所述,.NET通过配置`web.config`和编写`Global.asax`文件,结合Session管理、权限控制以及防止重复登录的策略,有效地解决了用户登录和超时问题,保证了系统的安全性。在实际应用中,这些方法需要根据具体业务...

    防止重复登陆课程案例源代码

    在IT行业中,尤其是在网络安全和身份验证领域,"防止重复登录"是一个重要的概念,它涉及到用户账户的安全管理和系统资源的有效利用。防止重复登录主要是为了确保一个账号在同一时间只能在一个设备或浏览器上保持活跃...

    解决重复登陆问题

    在IT行业中,尤其是在开发Web应用时,重复登录问题是一个常见的挑战。这通常涉及到用户尝试登录时,系统如何处理已存在的在线会话,特别是在多设备、多窗口或浏览器标签页同时登录的情况下。本篇文章将深入探讨如何...

    ASP.NET用户重复登录案例

    在ASP.NET中,处理用户登录是常见的功能,但如何有效地管理用户登录状态以防止重复登录,是开发者经常会遇到的问题。本文将深入探讨ASP.NET用户重复登录的案例,以及如何解决这个问题。 首先,我们要理解ASP.NET的...

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

    它允许开发者在用户浏览器会话期间保持特定数据,这对于处理用户登录、防止重复登录以及统计在线用户数等场景非常有用。本解决方案的核心就是巧妙地利用了`Session`对象的功能。 首先,我们来理解`Session`的基本...

    Web应用程重复登录问题

    "Web应用程重复登录问题"指的是用户在一台设备上登录后,在另一台设备或同一个浏览器的不同窗口中再次登录时,可能导致之前登录的会话失效,或者产生其他不期望的行为。这个问题主要涉及到会话管理、分布式环境下的 ...

    解决在线用户列表和重复登录

    通过以上方法,我们不仅能够有效地管理在线用户列表,还能防止重复登录,从而为用户提供更安全、更一致的使用体验。此外,这些技术还可以根据实际需求进行扩展和优化,比如引入更复杂的身份验证机制或采用分布式会话...

    jsp中限制用户多次登录或者同时在线

    有些情况下你也许会由这样的一个需求,就是限制同一个账号在不同地点上面重复登录,就像QQ一样,一个账号只能一个人登录,别人登录你的账号的话,那你这边就会提示“已在别处登录”并强制登出。 其实实现起来不是很...

    防止一个用户登录多次的方法

    ### 防止一个用户登录多次的方法 在Web开发领域,有时我们需要确保用户在同一时间内只能登录一次系统。这种设计逻辑可以有效地避免同一账户被不同设备同时登录所导致的安全隐患及用户体验下降的问题。本文将详细...

    delphi7实现SQL全局临时表防止用户重复登录

    在IT行业中,尤其是在开发企业级应用时,防止用户重复登录是一项重要的安全措施。Delphi7是一款经典的面向对象的编程环境,常用于开发Windows桌面应用程序。本篇将详细讲解如何使用Delphi7结合SQL数据库实现全局临时...

    freeradius2.1.3 防止用户帐号重复登录

    ### Freeradius 2.1.3 防止用户账号重复登录 #### 知识点一:Freeradius简介及版本说明...综上所述,通过以上步骤,我们可以在Freeradius 2.1.3中成功配置防止用户账号重复登录的功能,从而提升系统的安全性与稳定性。

    巧用SQL的全局临时表防止用户重复登录

    在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。本文介绍了使用SQL的全局临时表防止用户重复登录。

    登录防止重复提交1

    在Web应用中,用户登录时可能会因为网络延迟或其他原因导致多次点击提交按钮,从而产生重复登录请求,这可能导致不必要的服务器负载,甚至可能被恶意用户利用进行攻击。本文将详细探讨如何实现登录防止重复提交,并...

    JSP Spring防止用户重复登录的实现方法

    Spring Security是Spring生态系统的强大组件,专门用于处理应用程序的安全需求,包括防止重复登录。 首先,为了实现防止用户重复登录的功能,我们需要在`web.xml`配置文件中添加一个监听器,`...

Global site tag (gtag.js) - Google Analytics