一个账号只能在一个地方登陆一次

Posted AZRNG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个账号只能在一个地方登陆一次相关的知识,希望对你有一定的参考价值。

在登陆成功时候使用

Hashtable hOnline = (Hashtable)Application["Online"]; //定义一个全局变量
if (hOnline != null)
{
IDictionaryEnumerator idE = hOnline.GetEnumerator();
string strKey = "";
while (idE.MoveNext())
{
if (idE.Value != null && idE.Value.ToString()==info1.Id.ToString())
{
//already login
strKey = idE.Key.ToString();
hOnline[strKey] = "XXXXXX";
break;
}
}
}
else
{
hOnline = new Hashtable();
}
hOnline[Session.SessionID] = info1.Id;
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();

然后建立一个CommonPage页,系统中所有的页面都继承于CommonPage页,在CommonPage页的后台代码中添加如下代码:

override protected void OnInit(EventArgs e)
{

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))
{
//already login
if(idE.Value != null && "XXXXXX".Equals(idE.Value.ToString()))
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
MessageBox("你的帐号已在别处登陆,你被强迫下线!",Login.aspx);
return false;
}
break;
}
}
}

}

继承于CommonPage的页面在刷新时都要执行重载的OnInit中的代码,取出Online,找到该用户对应的SessionID,判断SessionID里对应的用户名是否变更,如果变更,就强迫下线,清掉Session,转到Login画面。

最后需要在Session过期或者退出系统时释放资源,在Global.asax文件中的Session_End中添加如下代码:

Hashtable hOnline = (Hashtable)Application["Online"];
if(hOnline[Session.SessionID] != null)
{
hOnline.Remove(Session.SessionID);
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
}

如果用户不正常退出后重登陆,因为重登陆的优先级大,不会影响用户的登陆,而不正常退出的用户占用的资源会在Session过期后自动清除,不会影响系统的性能。

转载自:http://www.cnblogs.com/top5/archive/2011/05/02/2034257.html

以上是关于一个账号只能在一个地方登陆一次的主要内容,如果未能解决你的问题,请参考以下文章

RXJS combineLatest running pipe 7 次一次发射

python将列表里的字符串一次一次显示出来

科学在一次一次的葬礼中进步

线程同步代码块:两个客户往一个银行存钱,每人存三十次一次存一百。 模拟银行存钱功能,时时银行现金数。

一次一密加密解密算法

java 抽奖 条件:一个账号一天只能抽取一次,一天有4个奖产生,一到4等级奖 请前辈给以代码之间。