【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();
View Code

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;

                    }

                }

            }
View Code

PS: 这段代码就是判断依据。

 

结果演示

【C#】ASP.NET网页中添加单点登录功能

 

你可能感兴趣的:(asp.net)