`
julyboxer
  • 浏览: 219099 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
发现对于登录问题的解决都说用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),可以判断该用户是否在线.


分享到:
评论
2 楼 julyboxer 2008-03-07  

使用Spring进行JMS消息传递——不错,但是没有魔法

http://spring.jactiongroup.net/viewtopic.php?t=1556

http://www-128.ibm.com/developerworks/web/library/wa-spring4/index.html
1 楼 lz726 2007-12-30  
你家在哪里?福州么?

相关推荐

    解决了类似QQ同名登陆的问题

    总的来说,解决类似QQ同名登录的问题需要综合运用会话管理、并发控制、安全性策略和用户体验设计等多方面的技术。通过这样的方式,我们可以确保用户在享受便捷服务的同时,也能保证他们的账号安全。

    QQ多用户登录助手 QQ多用户登录器

    QQ多用户登录助手 QQ多用户登录器QQ多用户登录助手QQ多用户登录助手QQ多用户登录助手QQ多用户登录助手QQ多用户登录助手

    通讯软件的设计类似QQ

    开发类似QQ的通讯软件,需要解决以下几个关键问题: 1. **高并发处理**:大量用户同时在线,服务器需要处理海量的并发请求,这要求高效的数据处理和存储技术。 2. **实时性**:实时性是通讯软件的生命线,需要优化...

    类似QQ的QQ小程序

    QQ小程序是一种轻量级的应用,它可以在QQ平台上运行,无需用户安装额外的软件,即可提供类似于完整版QQ的功能。这种小程序的设计理念是为了方便用户快速、便捷地使用各种服务,节省手机存储空间,同时也能带来良好的...

    qq登陆问题解决方法

    标题和描述中提到的知识点是关于解决QQ登录速度慢的问题,以及通过不同的技术手段限制他人在你的电脑上登录QQ。以下是对这些知识点的详细解析: ### QQ登录速度慢的原因及解决方法 #### 原因分析 - **网络连接不...

    类似qq的源代码

    QQ是一款知名的即时通讯软件,它的源代码对于我们理解网络通信、多线程编程、...通过学习和分析这样的源代码,开发者可以深入理解即时通讯软件的设计原理和技术实现,对于提升个人技能和解决实际问题具有很大的帮助。

    类似QQ的文字聊天室

    【标题】:“类似QQ的文字聊天室”是一种网络通信应用,旨在提供与腾讯QQ类似的实时文本聊天体验,允许多个用户在同一平台上进行同步交流。 【描述】:这个系统的核心功能是多人在线聊天,它复制了QQ的一些关键特性...

    类似qq聊天代码

    首先,我们需要理解"类似QQ聊天代码"的核心功能,这包括用户注册与登录、实时消息传输、好友管理、群组聊天等功能。在实现这些功能时,通常会采用多层架构,如前端展示层、业务逻辑层和数据访问层。 1. **前端展示...

    类似QQ截图效果源码

    在Windows应用程序开发中,实现类似QQ截图的效果通常涉及到图像处理、鼠标事件监听以及用户界面交互等多个方面的知识。下面,我们将详细讨论如何通过编程实现这一功能,以供WinForm入门学习者参考。 首先,我们需要...

    类似QQ的东西

    【标题】"类似QQ的东西" 指的是一款模仿QQ功能的应用程序,可能是为了学习C#编程语言或网络通信技术而开发的项目。这个项目旨在为用户提供即时通讯的基本功能,如文字聊天、好友管理、群组创建等。由于开发者提到...

    类似qq游戏大厅的源码

    【标题】"类似QQ游戏大厅的源码"指的是一个开发项目,其目标是创建一个与腾讯QQ游戏大厅类似的在线游戏平台。这样的系统通常包括用户登录、身份验证、游戏选择和游戏服务器对接等功能。 【描述】中提到的关键点是...

    类似QQ的全套聊天系统[极品] 源码

    【标题】:“类似QQ的全套聊天系统[极品] 源码”指的是一个基于.NET框架开发的、模仿QQ功能的完整聊天系统源代码。这个源码可能是为了教学、研究或者二次开发的目的而提供的,旨在帮助开发者理解即时通讯(IM)系统...

    QQ快捷登录 QQ互联OAuth2.0 获取QQ用户信息头像

    QQ快捷登录功能是基于QQ互联OAuth2.0协议实现的,它允许开发者为自己的网站或应用集成QQ账号的登录选项,提升用户体验并扩大用户基础。OAuth2.0是一种授权框架,广泛应用于各种社交平台,包括QQ,使得第三方应用能够...

    wxPython写的类似qq截图的小程序

    而“qq截图”标签则暗示了其功能特点,即提供类似QQ截图工具的用户体验,包括捕捉屏幕、编辑截图和可能的分享选项。 【压缩包子文件的文件名称列表】:CopyScreen 根据提供的压缩包子文件的文件名称“CopyScreen”...

    类似于QQ的软件,C#编写

    标题中的“类似于QQ的软件”指的是一个使用C#编程语言开发的应用程序,其设计目标是模仿或实现类似QQ的功能。QQ是一款在中国极其流行的即时通讯软件,提供了聊天、群聊、文件传输等多种通信服务。C#是一种面向对象的...

    Qt 模仿QQ登陆,QQ好友列表,QQ聊天窗口。完全复原QQ界面,可以学习Qt基础,Qt界面美化,自定义树形控件等知识。

    在本文中,我们将深入探讨如何使用Qt框架来模仿QQ的登录、好友列表和聊天窗口,以帮助初学者理解和掌握Qt的基础、界面美化以及自定义控件的创建。 首先,让我们了解Qt。Qt是一个跨平台的应用程序开发框架,由The Qt...

    类似QQ的全套聊天系统

    在IT行业中,构建一个类似QQ的全套聊天系统是一项复杂的工程,它涉及到多个关键技术领域,包括即时通讯(IM)、用户管理、消息传输、安全性、多平台支持以及用户体验设计等。QQ作为一款全球知名的即时通讯软件,其...

    解决QQ空间、QQ主页、QQ邮箱无法登录问题

    当遇到无法登录或打开这些服务的问题时,可能会对用户的生活和工作带来不便。以下是一些可能导致此类问题的原因及解决方案: 1. **网络问题**: - 确保你的网络连接正常,可以尝试刷新网页或者重启路由器。 - ...

    ios类似qq侧滑菜单的demo

    总的来说,实现“ios类似qq侧滑菜单的demo”需要掌握iOS中的手势识别、视图动画、自定义视图控制器等核心概念,同时还要关注用户体验和界面设计。通过学习并实践这样的项目,开发者可以深入理解iOS应用的架构和交互...

    类似qq聊天软件

    【标题】:“类似qq聊天软件”意味着这是一款模仿QQ功能的聊天应用程序,旨在提供与QQ类似的即时通讯体验。QQ是中国最流行的即时通讯软件之一,它提供了丰富的功能,包括文字聊天、语音通话、视频通话、表情包发送、...

Global site tag (gtag.js) - Google Analytics