///登录页面
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. NYOJ 451

    光棍节的快乐 描述 光棍们,今天是光棍节.聪明的NS想到了一个活动来丰富这个光棍节. 规则如下: 每个光棍在一个纸条上写一个自己心仪女生的名字,然后把这些纸条装进一个盒子里,这些光 棍依次抽取一张纸条 ...

  2. quartz-1.8.5 Demo

    最近在研究Spring中的定时任务功能,最好的办法当然是使用Quartz来实现.对于一个新手来说,花了我不少时间,这里我写个笔记,给大家参考. 我使用的是Maven来管理项目,需要的Jar包我给大家贴 ...

  3. 转: 深入理解Linux修改hostname

    from: http://www.cnblogs.com/kerrycode/p/3595724.html 写的相当详细!!! 深入理解Linux修改hostname 2014-03-12 10:17 ...

  4. TCP协议的三次握手和四次挥手

    暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...

  5. 快速部署tomcat项目的Shell脚本

    为了做集群测试,在每台机器上装了3个tomcat,每次发布项目的时候都要反复敲一些命令,重启tomcat之前先检查tomcat进程有没有停掉,没有还要手动kill该进程. 发布次数多了,操作就比较繁琐 ...

  6. Spring自动注入properties文件

    实现spring 自动注入属性文件中的key-value. 1.在applicationContext.xml配置文件中,引入<util />命名空间. xmlns:util=" ...

  7. 备忘:aliyun maven mirror

    <mirror>      <id>alimaven</id>      <name>aliyun maven</name>      &l ...

  8. 如何破解.net软件

    .net sdk中有不少很强大的工具,可以轻易完成对.net程序的破解,只要你懂得一点IL语言就行.现在以一个 M 软件为例,介绍整个破解过程. 第零步:用反编译工具分析软件的可执行文件,制订破解逻辑 ...

  9. PowerDesigner逆向工程导入MYSQL数据库总结

    由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 首先现在PowerDesigner,这里提供PD16.5版本链接: http://pa ...

  10. jeecg小吐槽

    1.online开发出来的表单,字段中设置的默认值,新建表单的时候不会出来,要保存后才会在后台补加进去!(为时已晚吧) 2.online开发出来的表单,主表中的附表,在online配置界面指定了可以为 ...