【C#】ASP.NET网页中添加单点登录功能
背景
首先,要说明的是,原先需求定义的是,同一个账号只能同时有一个人来登录,如果另外一个登录的话,前一个登陆者就自动被踢掉。本来原先要做成存储到服务器的数据库中,但是后来如果是非正常退出的话 下次就没法登录,这下就上网找资料 改了以后就有了下面的东东了。
登陆页后台
Login.aspx.cs //单点登录判断 Hashtable hOnline = (Hashtable)Application["Online"]; if (hOnline != null) { int i = 0; while (i < hOnline.Count) //因小BUG所以增加此判断,强制查询到底 { IDictionaryEnumerator idE = hOnline.GetEnumerator(); string strKey = ""; while (idE.MoveNext()) { if (idE.Value != null && idE.Value.ToString().Equals(userInfo[0].UserId.ToString())) { //already login strKey = idE.Key.ToString(); hOnline[strKey] = "XXXXXX"; break; } } i = i + 1; } } else { hOnline = new Hashtable(); } hOnline[Session.SessionID] = userInfo[0].UserId; Application.Lock(); Application["Online"] = hOnline; Application.UnLock();
PS:这段代码可直接放入登录按钮里,在进行了密码正确与否后直接使用。
基础页后台(公共页)
asePage.aspx.cs //单点登录判断 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(); string js = "<script language=javascript>alert('{0}');parent.window.location = '{1}' </script>";//window.location.replace('{1}') Response.Write(string.Format(js, "帐号已在别处登录 ,你将被强迫下线(请保管好自己的用户密码)!", ResolveClientUrl("~/Login.aspx"))); Session["UserInfo"] = null; return; } break; } } }
PS: 这段代码就是判断依据。
结果演示
作者:ruicky
出处:http://www.cnblogs.com/ruicky/
欢迎任何形式的转载,未经作者同意,请保留此段声明!