单点登录

实现单点登陆,实现方式为,比如,同一个用户已经登陆,而又在别处再次登陆,不会阻止这次登陆,而是在第一次登陆的界面刷新时,提示被迫下线,这个原理跟MSN类似,保证每个用户名只可有一个登陆在线

首先,在登陆页的事件中写下面的代码:

    protected void Login_Click(object sender, EventArgs e)

    {

        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(UserName.Text))

                {

                    strKey = idE.Key.ToString();

                    hOnline[strKey] = "XXXXXX";

                    break;

                }

            }

        }

        else

        {

            hOnline = new Hashtable();

        }

        hOnline[Session.SessionID] = UserName.Text;

        Application.Lock();

        Application["Online"] = hOnline;

        Application.UnLock();

    }
再建一个BasePage.cs类,继承自Page,重写OnInit,如下代码:
    protected override 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))
                {
                    if (idE.Value != null && "XXXXXX".Equals(idE.Value.ToString()))
                    {
                        hOnline.Remove(Session.SessionID);
                        Application.Lock();
                        Application["Online"] = hOnline;
                        Application.UnLock();
                        ShowAndUrlMessageBox("被迫下线.", "Login.aspx");
                    }
                }
                break;
            }
        }
    }
另外,在Global.asax中,
void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        // 或 SQLServer,则不会引发该事件。
        Hashtable hOnline = (Hashtable)Application["Online"];
        if (hOnline[Session.SessionID] != null)
        {
            hOnline.Remove(Session.SessionID);
            Application.Lock();
            Application["Online"] = hOnline;
            Application.UnLock();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值