限制帐号同时两处以上登录-ASP.NET
///登录页面
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的更多相关文章
- dedecms--二次开发文章内容页未登录禁止访问和同一个帐号只允许一个ip登录
最近在用dedecms二次开发会员功能,领导要求,会员未登录不允许访问文章内容页,和同一个账号只允许一个ip登录,我是将这两个在一起判断的,判断session存不存在,不存在的情况下就是未登录,这时候 ...
- Putty使用帐号和密码的自动登录
Putty使用ssh key做验证登陆是最方便的,不用密码.如果不想做key exchange,只是单纯想保存帐号密码做自动登陆,可以借助bat文件的方式如下,其中MyServer是已经保存了的ses ...
- djagno重写authenticate实现帐号和邮箱的多方式登录。
1.在users应用的view中重写authenticate: from django.contrib.auth.backends import ModelBackend from django.db ...
- U14Linux的帐号与用户组
1.在/etc/group和/etc/gshadow中查找mousegroup: grep mousegroup /etc/group /etc/gshadow (grep的使用) 2.其实Linux ...
- Git管理多个SSH密钥,Git多帐号配置
版权声明:转载须标明本文转自严振杰的博客 https://blog.csdn.net/yanzhenjie1003/article/details/69487932版权声明:转载必须注明本文转自严振杰 ...
- GitHub两种上传方式的对比----SSH / https
https://www.jianshu.com/p/1ac06bcd8ab5 https://www.cnblogs.com/lqfxyy/p/5740720.html https://blog.cs ...
- SSH简介及两种远程登录的方法
出处 https://blog.csdn.net/li528405176/article/details/82810342 目录 SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别 ...
- 如何修改SharePoint2013服务器场帐号密码
服务器远程登录帐号密码修改密码后,如何修改sharepoint服务器场管理员账户密码,今天登录了一下N久以前的搭建sharepoint2013服务器场的一台服务器器,登录进去以后直接提示帐号密码过期需 ...
- 开发Chrome Extension截取你微博的帐号密码
Google允许开发者对Chrome浏览器做扩展,所以有了之前火爆的12306抢票软件,我 也用它抢过票,一直很好奇它怎么注入js到12306上面的.这周有空研究了下Chrome Extension, ...
随机推荐
- NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...
- AC日记——寻找道路 洛谷 P2296
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- Selenium-java-TestNg-的运行
package com.day.www; import org.testng.annotations.AfterClass;import org.testng.annotations.AfterMet ...
- asp.net core 部署 提示DataProtectionServices 错误
今天在部署asp.net core网站时,因为调用到阿里云的api,api的参数需要加密签名,系统报出了如下错误: warn: Microsoft.Extensions.DependencyInjec ...
- jQuery+css3 弹幕
写了个基于jQuery+css3的弹幕功能,此功能面向手机wap,利用改变位移做弹幕功能会使一些性能低的手机浏览器卡,所以用了css3,此功能不支持非webkit内核浏览器 html部分 自己设置样式 ...
- Java 基础【13】 文件(文件夹) 创建和删除
使用 java.io.file 创建文件(文件夹),算是 java 最基础的知识,但实战项目中还是需要知晓细节. 比如 File 类中的 mkdir() 和 mkdirs() 的区别. JDK API ...
- Android开发的菜鸟小记
1.主线程异常:添加网络连接: 2.权限异常: 3.空指针异常:NullException: 添加网络权限: DEBUG:Connected to the target VM, address: 'l ...
- React Native 接入微博、微信、QQ 登录功能
在 App 开发中我们经常需要在用户登录模块接入 SNS 登录组件,这样会大大提高用户的注册体验.特别当一个不是刚性需求 App 推广的时候,这样会很大的降低用户体验的成本,没有人愿意忍受输入邮箱.手 ...
- 【深度分享】千团大战:看今天商业WiFi乱局及其破解之道
不知道还有没有人记得起始于2010年的千团大战.从2010年初开始,第一家团购网站上线以来,到2011年底,团购网站的数量超过了5000家.当时就有很多媒体预言,2013年,团购的泡沫就将褪去,将有9 ...
- C#多线程同步事件及等待句柄AutoResetEvent 和 ManualResetEvent
最近捣鼓了一下多线程的同步问题,发现其实C#关于多线程同步事件处理还是很灵活,这里主要写一下,自己测试的一些代码,涉及到了AutoResetEvent 和 ManualResetEvent,当然还有也 ...