首页 文章 Servlet/JSP 不用cookie,解决重复登陆问题。

邮件订阅

不用cookie,解决重复登陆问题。 E-mail
用户评价: / 0
好 
作者:Administrator   
2008-02-07 23:17

当我们打开多个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>



最后更新于: 2008-02-07 23:17
 

欢迎转载

本站文章欢迎转载,但请注明出处(http://www.javajia.com,Java家)