多点登陆限制,禁止用户多点在线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/It_sharp/article/details/86426863

概念

禁止用户多点在线,不同于单点登陆

  • 禁止用户多点在线,即当用户已在线时,该用户其他地点登陆,该用户被挤下线。
  • 单点登陆,指用户只用登陆一个站点,其他站点默认登陆。

知识点

知识点1:不同的浏览器访问站点,代表不同的会话,有不同的SessionID,存在于浏览器的Cookie上和服务器上。

知识点2:.NET中有一个全局文件Global.asax中,Session_End函数是在Session结束时做处理。注:结束时指Session注销,也指过期,自动进入Session_End函数。

<sessionState mode="InProc" timeout="1"></sessionState>
//说明:<sessionState>是<system.web>的子元素,其中timeout属性表示Session的过期时间,单位是分钟,上面的意思是用户一分钟在页面无任何操作则Session失效

以上可以快速进入Session_End函数

知识点3:Web应用的生命周期是这样的:Application_Start -> Session_Start -> Session_End -> Application_End

思路

在这里插入图片描述
此后,每个页面都判断一次key为该sessionId的值是否为"XXX"或者空,满足条件就跳转到登陆页。

拓展:key是sessionId,value是userName 的全局对象可以存文件中,数据库中亦可。

代码

//Global.asax 会话
protected void Session_End(object sender, EventArgs e)
        {
            Hashtable hOnline = (Hashtable)Application["Online"];
            if (hOnline[Session.SessionID] != null)
            {
                hOnline.Remove(Session.SessionID);
                Application.Lock();
                Application["Online"] = hOnline;
                Application.UnLock();
            }    
        }
//MasterPage.Master.cs
        protected void Page_Load(object sender, EventArgs e)
        {
            Hashtable hashTable = (Hashtable)Application["Online"];
            if (!hashTable.ContainsKey(Session.SessionID) || hashTable[Session.SessionID] == "XXX")
            {
                Response.Redirect("~/Login.aspx");
            }
        }
//Login.aspx
protected void Button1_Click(object sender, EventArgs e)
        {
            Hashtable hsTable = (Hashtable)Application["Online"];
            string strUserName = txtBox.Text;
            string strKey = "";
            //判断全局对象中是否有此用户
            foreach (string key in hsTable.Keys)
            {
                if (hsTable[key].ToString() == strUserName)
                {
                    strKey = key;
                }
            }
            if (strKey != "")
            {
                hsTable[strKey] = "XXX";
            }
            hsTable.Add(Session.SessionID, strUserName);
            Response.Redirect("~/HomePage.aspx");
        }

代码Demo https://pan.baidu.com/s/1OqyD4XAHs5d7OnLI_zebcw

猜你喜欢

转载自blog.csdn.net/It_sharp/article/details/86426863