同一个用户帐号,在同一时间内只能一个人使用。
来源:互联网 发布:国外免费网络硬盘 编辑:程序博客网 时间:2024/05/16 05:00
发现对于登录问题的解决都说用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),可以判断该用户是否在线.
这里的讨论很热烈,不过首先得澄清,这个问题不叫单点登陆,呵呵,单点登陆指的是sso,感兴趣的朋友可以看看josso。
- 同一个用户帐号,在同一时间内只能一个人使用。
- 一个帐号在同一时间只能一个人登录
- 同一时间同一帐号只能登陆在一台电脑
- spring实现同一账号同一时间只能在同一个地方登录
- 限定时间内同一ip只能访问一次
- 一个帐号同一时间只能一个人登录
- 一个帐号同一时间只能一个人登录
- 一个帐号同一时间只能一个人登录
- java 一个帐号同一时间只能一个人登录
- 一个帐号同一时间只能一个人登录
- 控制用户或者组用户在同一时间内登陆的个数
- 同一时间同一帐号只能登陆一
- 单点登陆--同一个帐户只能在一台电脑(同一IP)上登陆
- java web开发一个帐号同一时间只能一个人登录
- java web开发一个帐号同一时间只能一个人登录
- java web开发一个帐号同一时间只能一个人登录
- java web开发一个帐号同一时间只能一个人登录
- Java web开发一个帐号同一时间只能一个人登录
- 0/1的奥秘:直接取二进制中1的个数的算法
- SpeedStudio开发实录系列(2)
- 重载赋值运算符
- 叫我如何“踏实”——写给李可文(转贴)
- 投资理财有五忌
- 同一个用户帐号,在同一时间内只能一个人使用。
- 进入Bcg的2轮面试--摘录
- Hashtable和HashMap
- 售前工程师职位调查
- oracle分页sql
- 模糊视线里的记忆——纪念李可文(转贴)
- 什么是守护进程?守护进程的特性
- 一个叫sjjf的程序员的历程
- Java反射机制(一)