防止重复登陆的思路就是:判断session中用户的值(比如;用户名、用户id等)是否存在,如果存在,则提示用户此账户已登陆,类似QQ的重复登陆功能。
实现如下:(此类已经在项目中运行,代码拷贝至实际的项目,稍微修改即可)
①SessionListener,该listener实现 HttpSessionListener接口
- import javax.servlet.http.*;
-
import java.util.*;
-
-
-
public class SessionListener implements HttpSessionListener{
-
@SuppressWarnings("unchecked")
-
private static java.util.Hashtable hUserName = new Hashtable();
-
public void sessionCreated(HttpSessionEvent se){
-
System.out.println( "客户端已连接服务器 --会话号为: " + se);
- }
-
-
public void sessionDestroyed(HttpSessionEvent se){
- hUserName.remove(se.getSession());
-
System.out.println( "用户会话已失效session -- " + se);
- }
-
-
@SuppressWarnings("unchecked")
-
public synchronized static boolean isLogined(HttpSession session,String user_id1,String user_name){
-
boolean flag = false;
-
if(hUserName.containsKey(user_id1)){
-
flag = true;
- HttpSession vsession = (HttpSession)hUserName.get(user_id1);
-
try {
-
vsession.invalidate();
-
System.out.println("用户 - " + user_name + " || 已存在 - " +session);
-
System.out.println("用户 - " + user_name + " || 被挤掉了");
- }
-
catch (Exception ex){}
- }
-
else{
-
flag = false;
-
- }
- hUserName.remove(user_id1);
- hUserName.remove(user_name);
-
if(flag==false){
- hUserName.put(user_id1,session);
-
System.out.println("用户已经登陆: - " + user_name + " || 会话号为: - " +session);
- }
-
return flag;
- }
- }
②登陆Action调用如下:
- public String userLogin() {
-
-
String username = "";
-
String realname = "";
-
try {
-
- listAllUser = userService.userLogin(user.getUsername(), Password
- .createPassword(getPassword()));
-
-
} catch (Exception e) {
- e.printStackTrace();
- }
- Iterator<OrderUser> rs = listAllUser.iterator();
- HttpSession session = ServletActionContext.getRequest().getSession();
-
if (listAllUser.size() != 0) {
-
while (rs.hasNext()) {
- OrderUser user = rs.next();
-
session.setAttribute("username", user.getUsername().toString()
- .trim());
-
session.setAttribute("realname", user.getName().toString()
- .trim());
-
session.setAttribute("id", user.getId().toString().trim());
-
Timestamp d = new Timestamp(System.currentTimeMillis());
- user.setLoginTime(d);
- userService.update(user);
-
System.out.println("MD5验证4"
- + Password.authenticatePassword(user.getPassword(),
- getPassword()));
- username = user.getUsername().toString().trim();
- realname = user.getName().toString().trim();
-
-
if (user.getStatus().equals("冻结")) {
-
return "dongjie";
- }
-
-
-
-
- }
-
-
boolean flag = SessionListener.isLogined(session, username,
-
realname);
-
-
if (flag == true) {
-
return "isloged";
-
} else {
-
System.out.println("用户正常登陆");
- }
-
-
return SUCCESS;
-
} else {
-
-
return INPUT;
- }
-
- }
③web.xml配置部分如下:
- <listener>
-
<listener-class>com.yaxing.util.SessionListener</listener-class>
-
</listener>
④struts.xml配置部分如下:
- <action name="userLogin" class="userBean" method="userLogin">
-
<result name="success">/web/Index.html</result>
-
<result name="input">/web/loginFailure.jsp</result>
-
<result name="dongjie">/web/dongjie.jsp</result>
-
<result name="isloged">/web/loged.jsp</result>
-
</action>
⑤提示js 如下:
- <body>
-
<script type="text/javascript">
- alert("你的账号已经登录!");
-
-
</script>
-
<%
-
response.setHeader("refresh","0;URL = ../web/Index.html");
-
%>
-
-
</body>
本文出自 “幽灵柯南的技术blog” 博客,请务必保留此出处http://enetq.blog.51cto.com/479739/702256
分享到:
相关推荐
### ASP防止重复登录知识点 #### 一、ASP与防止重复登录背景 在Web应用程序开发过程中,用户登录状态的管理是一项非常重要的任务。特别是在基于Active Server Pages (ASP) 的早期Web应用环境中,确保用户不会被...
如果检测到同一令牌的多个登录,服务器可吊销旧令牌并生成新的,防止重复登录。 3. **数据库锁定**:在用户登录时,系统可以在数据库中设置一个状态字段,表示用户当前已登录。如果检测到另一登录尝试,可以检查该...
许多成熟的Web开发框架,如Spring Security、Django、Express.js等,都提供了防止重复登录的解决方案,开发者可以根据实际需求选择合适的方法和技术进行实现。 总结,防止用户重复登录是现代应用程序中一个重要的...
综上所述,.NET通过配置`web.config`和编写`Global.asax`文件,结合Session管理、权限控制以及防止重复登录的策略,有效地解决了用户登录和超时问题,保证了系统的安全性。在实际应用中,这些方法需要根据具体业务...
在IT行业中,尤其是在网络安全和身份验证领域,"防止重复登录"是一个重要的概念,它涉及到用户账户的安全管理和系统资源的有效利用。防止重复登录主要是为了确保一个账号在同一时间只能在一个设备或浏览器上保持活跃...
在IT行业中,尤其是在开发Web应用时,重复登录问题是一个常见的挑战。这通常涉及到用户尝试登录时,系统如何处理已存在的在线会话,特别是在多设备、多窗口或浏览器标签页同时登录的情况下。本篇文章将深入探讨如何...
在ASP.NET中,处理用户登录是常见的功能,但如何有效地管理用户登录状态以防止重复登录,是开发者经常会遇到的问题。本文将深入探讨ASP.NET用户重复登录的案例,以及如何解决这个问题。 首先,我们要理解ASP.NET的...
它允许开发者在用户浏览器会话期间保持特定数据,这对于处理用户登录、防止重复登录以及统计在线用户数等场景非常有用。本解决方案的核心就是巧妙地利用了`Session`对象的功能。 首先,我们来理解`Session`的基本...
"Web应用程重复登录问题"指的是用户在一台设备上登录后,在另一台设备或同一个浏览器的不同窗口中再次登录时,可能导致之前登录的会话失效,或者产生其他不期望的行为。这个问题主要涉及到会话管理、分布式环境下的 ...
通过以上方法,我们不仅能够有效地管理在线用户列表,还能防止重复登录,从而为用户提供更安全、更一致的使用体验。此外,这些技术还可以根据实际需求进行扩展和优化,比如引入更复杂的身份验证机制或采用分布式会话...
有些情况下你也许会由这样的一个需求,就是限制同一个账号在不同地点上面重复登录,就像QQ一样,一个账号只能一个人登录,别人登录你的账号的话,那你这边就会提示“已在别处登录”并强制登出。 其实实现起来不是很...
### 防止一个用户登录多次的方法 在Web开发领域,有时我们需要确保用户在同一时间内只能登录一次系统。这种设计逻辑可以有效地避免同一账户被不同设备同时登录所导致的安全隐患及用户体验下降的问题。本文将详细...
在IT行业中,尤其是在开发企业级应用时,防止用户重复登录是一项重要的安全措施。Delphi7是一款经典的面向对象的编程环境,常用于开发Windows桌面应用程序。本篇将详细讲解如何使用Delphi7结合SQL数据库实现全局临时...
### Freeradius 2.1.3 防止用户账号重复登录 #### 知识点一:Freeradius简介及版本说明...综上所述,通过以上步骤,我们可以在Freeradius 2.1.3中成功配置防止用户账号重复登录的功能,从而提升系统的安全性与稳定性。
在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。本文介绍了使用SQL的全局临时表防止用户重复登录。
在Web应用中,用户登录时可能会因为网络延迟或其他原因导致多次点击提交按钮,从而产生重复登录请求,这可能导致不必要的服务器负载,甚至可能被恶意用户利用进行攻击。本文将详细探讨如何实现登录防止重复提交,并...
Spring Security是Spring生态系统的强大组件,专门用于处理应用程序的安全需求,包括防止重复登录。 首先,为了实现防止用户重复登录的功能,我们需要在`web.xml`配置文件中添加一个监听器,`...