///登录页面
Hashtable haol = (Hashtable)Application["olTable"];
if (haol == null)
{
haol = new Hashtable();
Application["olTable"] = haol;
}
else
{ HttpCookie cookie = new HttpCookie("ZInfo");//定义cookie对象以及名为Info的项  
if (Request.Cookies["Info"] != null)
{
Request.Cookies["Info"].Values["UserHotleID"] = SessionInclude.UserBranchId;
//cookie.Values.Add("UserHotleID", SessionInclude.UserBranchId);
Response.AppendCookie(cookie);//确定写入cookie中 
}
else
{
cookie.Values.Add("UserHotleID", SessionInclude.UserBranchId);
Response.AppendCookie(cookie);//确定写入cookie中 
} //当前用户标识
Guid key = Guid.NewGuid();
Session["userKey"] = key;
IDictionaryEnumerator list = haol.GetEnumerator();
ArrayList ls = new ArrayList();
while (list.MoveNext())
{
if (list.Value.ToString() == SessionInclude.SessionId.Trim())
{
ls.Add(list.Key);
//haol.Remove(list.Key);
}
}
int i = ls.Count - ;
while (i > -)
{
Application.Lock();
haol.Remove(ls[i]);
Application.UnLock();
i = i - ;
}
Application.Lock();
haol.Add(key, SessionInclude.SessionId.Trim());
Application["olTable"] = haol;
Application.UnLock();
}
   ///所有页面继承类
public class BasePage : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
} override protected void OnInit(EventArgs e)
{
BasePageInitInfo();
}
public void BasePageInitInfo()
{
try
{
Hashtable haol = (Hashtable)Application["olTable"];
if (haol == null)
{
haol = new Hashtable();
Application["olTable"] = haol;
}
else
{
if (Session["userKey"] != null)
{
//当前用户Key
Guid key = new Guid(Session["userKey"].ToString());
IDictionaryEnumerator val = haol.GetEnumerator();
while (val.MoveNext())
{
if (val.Value.ToString().Trim() == SessionInclude.SessionId.Trim())
{
Guid currGuid = new Guid(val.Key.ToString());
if (!currGuid.Equals(key))
{
Application.Lock();
haol.Remove(Session["userKey"].ToString());
Session["userKey"] = null;
Application.UnLock();
Response.Write("<script>alert('您的帐号在别处登录,您被迫下线');window.parent.location='../Login.aspx';</script>");
break;
}
}
}
}
else
{
//当前用户标识
Guid key = Guid.NewGuid();
Session["userKey"] = key;
IDictionaryEnumerator list = haol.GetEnumerator();
ArrayList ls = new ArrayList();
while (list.MoveNext())
{
if (list.Value.ToString() == SessionInclude.SessionId.Trim())
{
ls.Add(list.Key);
//haol.Remove(list.Key);
}
}
int i = ls.Count - ;
while (i > -)
{
Application.Lock();
haol.Remove(ls[i]);
Application.UnLock();
i = i - ;
}
Application.Lock();
haol.Add(key, SessionInclude.SessionId.Trim());
Application["olTable"] = haol;
Application.UnLock();
}
}
}
catch
{ } }

限制帐号同时两处以上登录-ASP.NET的更多相关文章

  1. dedecms--二次开发文章内容页未登录禁止访问和同一个帐号只允许一个ip登录

    最近在用dedecms二次开发会员功能,领导要求,会员未登录不允许访问文章内容页,和同一个账号只允许一个ip登录,我是将这两个在一起判断的,判断session存不存在,不存在的情况下就是未登录,这时候 ...

  2. Putty使用帐号和密码的自动登录

    Putty使用ssh key做验证登陆是最方便的,不用密码.如果不想做key exchange,只是单纯想保存帐号密码做自动登陆,可以借助bat文件的方式如下,其中MyServer是已经保存了的ses ...

  3. djagno重写authenticate实现帐号和邮箱的多方式登录。

    1.在users应用的view中重写authenticate: from django.contrib.auth.backends import ModelBackend from django.db ...

  4. U14Linux的帐号与用户组

    1.在/etc/group和/etc/gshadow中查找mousegroup: grep mousegroup /etc/group /etc/gshadow (grep的使用) 2.其实Linux ...

  5. Git管理多个SSH密钥,Git多帐号配置

    版权声明:转载须标明本文转自严振杰的博客 https://blog.csdn.net/yanzhenjie1003/article/details/69487932版权声明:转载必须注明本文转自严振杰 ...

  6. GitHub两种上传方式的对比----SSH / https

    https://www.jianshu.com/p/1ac06bcd8ab5 https://www.cnblogs.com/lqfxyy/p/5740720.html https://blog.cs ...

  7. SSH简介及两种远程登录的方法

    出处 https://blog.csdn.net/li528405176/article/details/82810342 目录 SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别 ...

  8. 如何修改SharePoint2013服务器场帐号密码

    服务器远程登录帐号密码修改密码后,如何修改sharepoint服务器场管理员账户密码,今天登录了一下N久以前的搭建sharepoint2013服务器场的一台服务器器,登录进去以后直接提示帐号密码过期需 ...

  9. 开发Chrome Extension截取你微博的帐号密码

    Google允许开发者对Chrome浏览器做扩展,所以有了之前火爆的12306抢票软件,我 也用它抢过票,一直很好奇它怎么注入js到12306上面的.这周有空研究了下Chrome Extension, ...

随机推荐

  1. 在运行Hibernate Hello World程序的时候,抛如下错误: view plain Exception in thread "main" org.hibernate.exception.LockAcquisitionException 解决方法

    在运行Hibernate Hello World程序的时候,抛如下错误: Exception in thread "main" org.hibernate.exception.Lo ...

  2. 线程同步之 yield() wait()

    yield()没有参数. sleep 方法使当前运行中的线程睡眼一段时间,进入不可运行状态,这段时间的长短是由程序设定的,yield 方法使当前线程让出CPU占有权,但让出的时间是不可设定的.yiel ...

  3. POJ1201 Intervals[差分约束系统]

    Intervals Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 26028   Accepted: 9952 Descri ...

  4. 第二章 spring

    一.Bean作用域 spring容器创建的时候,会将所有配置的bean对象创建出来,默认bean都是单例的.代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构 ...

  5. Linux下基于vsftpd搭建ftp服务器

    1.先用检查是否已经安装rpm -qa| grep vsftpd2.然后再进行在线安装vsftpd这个服务yum install vsftpd -y3.修改vi /etc/vsftpd/vsftpd. ...

  6. Nginx编译参数.md

    Nginx 介绍 简介 Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存. ...

  7. ToolProvider.getSystemJavaCompiler() Return NULL!

    http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html

  8. [转载]一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    本文转载自:http://blog.csdn.net/testcs_dn/article/details/38496107 开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区 ...

  9. C 语言学习 第一次作业总结

    第一次的作业是冯老师布置的练习题,需要在pta平台上完成.我这边看不到结果,但是透过冯老师给出的截图,同学们都还是认真的去做的.同时,我这边也布置了一个持续 3 周的作业:熟悉 git 的使用.因为后 ...

  10. c#编码转换

    /// <summary> /// URL编码 /// </summary> /// <param name="Source"></par ...