类似QQ的同名用户登录问题的解决

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

发现对于登录问题的解决都说用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),可以判断该用户是否在线.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航