防止用户登重复登录思路

实现思路:

 用户登录成功后,将用户登录信息存放到Hashtable类型的Application["Online"]里面,其键值为 SessionID,其Value值为用户ID;当用户注销时,调用Session.Abandon;在Global.asax里面的 SessionEnd事件中,将用户ID从Hashtable中删除;在用户访问页面时,察看Hashtable中能不能 有对应的用户ID如果没有则判断用户不在线

 

1、公用类中判断用户能不能 在线的函数(供用户调用)

 

代码
/**/ ///   <summary>  
///  判断用户strUserID能不能 包含在Hashtable h中 
///   </summary>  
///   <param name="strUserID"></param>  
///   <param name="h"></param>  
///   <returns></returns>  
public   static   bool  AmIOnline( string  strUserName, Hashtable h)
{
    
if  (strUserName ==   null )
        
return   false ;

    
// 继续判断能不能 该用户已经登陆 
     if  (h  ==   null )
        
return   false ;

    
// 判断哈希表中能不能 有该用户 
    IDictionaryEnumerator e1  =  h.GetEnumerator();
    
bool  flag  =   false ;
    
while  (e1.MoveNext())
    {
        
if  (e1.Value.ToString().CompareTo(strUserName)  ==   0 )
        {
            flag 
=   true ;
            
break ;
        }
    }
    
return  flag;

}

 


 

 2、用户登录事件处理:

代码
private   void  btnlogin_Click( object  sender, System.Web.UI.ImageClickEventArgs e)

    
// User为自定义的类,其中包含Login要领 
    User CurUser  =   new  User();
    CurUser.UserName 
=   this .username.Text.Trim();

    
if  (MyUtility.AmIOnline(CurUser.UserName, (Hashtable) Application[ " Online " ]))
    {



                    response.write(
" <script>alert('您所运用 的登录ID已经在线了!您不能重复登录!');</script> " ); 


        
return ;

    }

          
else   

      { 
      Hashtable h 
=  (Hashtable) Application[ " Online " ];       

        
if  (h  ==   null )           

        h 
=   new  Hashtable();       

        h[Session.SessionID] 
=  CurUser.UserName;      

        Application[
" Online " =  h;

          }

 




 


 

3、在Global.asax中的Session_End事件:

代码
protected   void  Session_End(Object sender, EventArgs e)
{
    Hashtable h 
=  (Hashtable) Application[ " Online " ];

    
if  (h[Session.SessionID]  !=   null )
        h.Remove(Session.SessionID);

    Application[
" Online " =  h;
}

 

根据网上资料提纯了一下、关键是思路!

<逆水行舟,不进则退>

你可能感兴趣的:(用户)