• 【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: 这段代码就是判断依据。

    结果演示

  • 相关阅读:
    Win7 中出现图标显示不全或消失的解决方法
    动态控制ToolStrip上ToolStripButton的图标大小
    TS——类型断言
    TS——函数的类型
    TS之对象类型——接口
    TS——联合类型
    Git文件合并
    1-1、作用域深入和面向对象
    webStrom2017.1版本如何添加vue.js插件
    二:搭建一个webpack3.5.5项目:建立项目的webpack配置文件
  • 原文地址:https://www.cnblogs.com/ruicky/p/4381107.html
Copyright © 2020-2023  润新知