JR 精品文章 - 不用cookie,解决重复登陆问题。
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » JSP/Servlet/JSF 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
不用cookie,解决重复登陆问题。
qingyuan914 原创   更新:2008-02-02 23:29:19  版本: 1.0   

当我们打开多个IE用同一个user登陆的时候,如果用cookie做登陆记录,由于每次登陆都会
刷新本地cookie信息,不存在重复登陆问题。如果我们摒弃cookies,只用session,则需要
费一些周折了。
请看下边的解决方法:
1.登陆时假设登陆名loginINFO[0],建立session记录登陆名字。

if(rs_login.next()){
           Login_servlet.logger.info("登陆验证成功");//log4j
             OnLineUser OLU=new OnLineUser();//
           if  (!OLU.existUser(loginINFO[0])){  
              Login_servlet.logger.info("重复登陆");
        return;
                     
                }else{  
                      session.setMaxInactiveInterval(3000); //session的生命周期
                        session.setAttribute(loginINFO[0],OLU);    
                       
               
                }  

.
.
.
2.监听器代码:OnLineUser

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
  

import org.apache.log4j.Logger;


import  java.util.*;
/**
 * @author wangshangting
 *
 * 目的:
 * 用于统计在线人数,防止统一帐号登陆,退出取消账号
 */
public  class OnLineUser implements HttpSessionBindingListener{  
//    private static OnLineUser instance = null;

//    synchronized public static OnLineUser getInstance()//singleton模式,确保只有一个OnLineUser实例
//    {
//    if( instance == null )
//    {
//        instance = new OnLineUser();
//    }
//    return instance;
//    }

    
    
    static Logger logger = Logger.getLogger(OnLineUser.class.getName());
    public  OnLineUser(){  
    }  

    private static Vector  users=new  Vector();  //静态变量!!!!!!!!!!!!
    private int i=1;
    public  int  getCount(){  
      
            users.trimToSize();  
    
            return  users.capacity();  
    }  
    public  boolean  existUser(String  userName){  
            users.trimToSize();  
            boolean  existUser=true;  
            for  (int  i=0;i<users.capacity();i++  )  
            {  
                    if  (userName.equals((String)users.get(i)))  
                    {  
                            existUser=false;  
                            OnLineUser.logger.info(users.get(i));
                            OnLineUser.logger.info("重复");
                            break;  
                    }  
            }  
            return  existUser;  
    }  

    
    public  boolean  deleteUser(String  userName)  {  
        OnLineUser.logger.info("移除开始!!");
            users.trimToSize();  
      
            if(!existUser(userName)){  
                    int  currUserIndex=-1;  
                    for(int  i=0;i<users.capacity();i++){  
                            if(userName.equals((String)users.get(i))){  
                //                OnLineUser.logger.info("找到");
                                    currUserIndex=i;  
                                    break;  
                            }  
                    }  
                    if  (currUserIndex!=-1){  
                         OnLineUser.logger.info("移除:"+currUserIndex);
                            users.remove(currUserIndex);  
                            users.trimToSize();  
                            return  true;  
                    }  
                    
            }  
            return  false;  
    }  

    public  Vector  getOnLineUser()  
    {  
            return  users;  
    }  
    
        public  void  valueBound(HttpSessionBindingEvent  e)  {  
            users.trimToSize();  
    
                    users.add(e.getName());  

                    
                    OnLineUser.logger.info(e.getName()+"\t      登入到系统\t"+(new  Date()));  
                    OnLineUser.logger.info("第"+i+"进入");
                    i++;
         
                    for(int i = 0;i < users.size();i++){
                        OnLineUser.logger.info(""+i+":"+users.get(i));
                    }
                  
                    System.out.println("            在线用户数为:"+getCount());   
                    
           }
 
        

        
        /**
         * 
         */
        public  void  valueUnbound(HttpSessionBindingEvent  e)  {  
            users.trimToSize();  
            String  userName=e.getName();  

            deleteUser(userName); 

            OnLineUser.logger.info(userName+"\t      退出系统\t"+(new  Date()));  
            OnLineUser.logger.info("            在线用户数为:"+getCount());  
        }  
}  

3.在web.xml中所有的servlet配置前加上如下代码。

<listener>
 <listener-class>cn.wst.common.onLine.OnLineUser </listener-class>
 </listener>



版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     14       0
作者其它文章: 作者全部文章
评论人:lxxsl 发表时间: Thu Feb 21 12:54:11 CST 2008
研究一下

这个文章共有 1 条评论
主题: XMLHttpRequest对象创建数据请求处理(一) 上一篇文章
返回文章列表 返回〔JSP/Servlet/JSF〕
下一篇文章 主题: 一个分页组件


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号