asp.net下一个账号不允许多个用户同时在线,重复登陆的代码

时间:2022-01-01 16:27:58

方法一:

复制代码代码如下:

string sKey = username.Text.ToString().Trim(); // 得到Cache中的给定Key的值 
string sUser = Convert.ToString(Cache[sKey]); // 检查是否存在 
if (sUser == null || sUser == String.Empty) 

TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);//取得Session的过期时间 
HttpContext.Current.Cache.Insert(sKey, sKey, null, DateTime.MaxValue, SessTimeOut, System.Web.Caching.CacheItemPriority.NotRemovable, null);//将值放入cache己方便单点登录 
//成功登录 

else if (Cache[sKey].ToString() == sKey)//如果这个账号已经登录 

ClientScript.RegisterStartupScript(GetType(), "提示", "<script>alert('对不起,当前用户已经登录');</script>"); 
return; 

else 

Session.Abandon();//这段主要是为了避免不必要的错误导致不能登录 

 

复制代码代码如下:

//关闭浏览器或窗口时清空Cache的方法.在主页面aspx文件中加入一个onunload事件.通过ajax清空hOnline中的Session.SessionID 
window.onunload=function(){ 
$.ajax({ 
type: "POST", 
   data:"sKey="+sKey; 
url: "online.aspx" 
}); 


online.aspx.cs代码 

复制代码代码如下:

protected void Page_Load(object sender, EventArgs e) 

    HttpContext.Current.Cache.Remove(sKey); 

//在Global.asax文件中的Session_End方法里加入 
//Session过期后.清空hOnline中的Session.SessionID 
    Hashtable hOnline = (Hashtable)Application["Online"]; 
if (hOnline[Session.SessionID] != null) 

hOnline.Remove(Session.SessionID); 
Application.Lock(); 
Application["Online"] = hOnline; 
Application.UnLock(); 


方法二: 

复制代码代码如下:

//sKey为登录用户名 
if(ApplicationOnline(username.Text.tirm())){ 
Hashtable hOnline = new Hashtable(); 
hOnline[Session.SessionID] = sKey; 
Application.Lock(); 
Application["Online"] = hOnline; 
Application.UnLock(); 


public Boolean ApplicationOnline(string sKey) 

Boolean flag = true; 
Hashtable hOnline = (Hashtable)Application["Online"]; 
if (hOnline != null) 

IDictionaryEnumerator idE = hOnline.GetEnumerator(); 
while (idE.MoveNext()) 

//if (idE.Key != null && idE.Key.ToString().Equals(Session.SessionID)) 
//{ 
if (idE.Value != null && sKey.Equals(idE.Value.ToString())) 

flag = false; 

break; 
//} 


return flag; 


//关闭浏览器或窗口时清空Session.SessionID的方法.在主页面aspx文件中加入一个onunload事件.通过ajax清空Session.SessionID 
window.onunload=function(){ 
$.ajax({ 
type: "POST", 
url: "online.aspx" 
}); 


online.aspx.cs代码 

复制代码代码如下:

protected void Page_Load(object sender, EventArgs e) 

Hashtable hOnline = (Hashtable)Application["Online"]; 
if (hOnline[Session.SessionID] != null) 

hOnline.Remove(Session.SessionID); 
Application.Lock(); 
Application["Online"] = hOnline; 
Application.UnLock();