Asp.net(单点登录)第二次登陆时把第一次的登陆注销掉
发布:liao | 发布时间: 2009年10月22日这个功能是在第二次登录的时候,把第一次登录的注销,解决以前不能登录的BUG,实现方法.在验证成功能加入
Hashtable hOnline = (Hashtable)Application["Online"];
if(hOnline != null)
{
IDictionaryEnumerator idE = hOnline.GetEnumerator();
string strKey = "";
while(idE.MoveNext())
{
if(idE.Value != null && idE.Value.ToString().Equals(UserID))
{
//already login
strKey = idE.Key.ToString();
hOnline[strKey] = "XXXXXX";
break;
}
}
}
else
{
hOnline = new Hashtable();
}
hOnline[Session.SessionID] = UserID;
Application.Lock();
Application["Online"] = hOnline;
Application.UnLock();
用 户登陆的时候将登陆用户名放在一个全局变量Online,Online为Hashtable结构,Key为SessionID,Value为用户名。每次 用户登陆时均判断以下要登陆的用户名在Online中是不是已经存在,如果存在该用户名已经被登陆,将第一个人登陆的SessionID对应的用户名强制 变更为XXXXXX,表示该登陆将被强制注销。
建立一个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过期后自动清除,不会影响系统的性能。
- 相关文章:
ASP.NET把DataSet加入缓存Cache非常重要的一点,防DataSet丢失 (2009-10-22 16:35:8)
负载均衡让session不丢失 (2009-5-14 14:17:25)
使用FindControl方法获取控件值 (2008-12-4 10:21:26)
WebPart (2008-7-13 17:55:15)
15天学会jQuery(14) (2008-7-9 23:24:35)
15天学会jQuery(13) (2008-7-9 23:23:58)
15天学会jQuery(12) (2008-7-9 23:23:10)
15天学会jQuery(11) (2008-7-9 23:22:23)
15天学会jQuery(10) (2008-7-9 23:14:26)
15天学会jQuery(9) (2008-7-9 23:13:24)
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。





