如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法
2005-05-28 18:31
821 查看
最近做了个asp.net程序,根据要求,某用户名只能在x台机器上登陆(x为授权同时登陆数量),不允许超过x数量的用户再使用该用户名登陆。
以前有人认为可以使用数据库某个字段来管理这个权限,但是数据库的弱点在于用户关闭浏览器时,不进行任何操作。
我想了个办法,使用Application和Session。大体思路是这样的:
每个登陆的客户端,都有一个SessionID,这些SessionID是唯一性的。
登陆程序先判断用户名密码的正确性,再从数据库中取出该用户名被授权的客户端数,存在一个叫username_count的Application中。
if(LoginCheck()==true)
{
Application[username+"_count"]=objUser.GetAuthCount();
}
用户名密码验证后:
Session["user"]=username; //用户名存Session
if(Application[username+"_login"]==null)
{
//这个用户名之前还没登陆过
string id=Session.SessionID.ToString();
ArrayList arr=new ArrayList();
arr.Add(id);
Application[username+"_login"]=arr;
}
else
{
//该用户名已经登陆过
ArrayList arr=new ArrayList();
arr=(ArrayList)Application[username+"_login"];
if(arr.Lenth<Convert.ToInt16(Application["username+"_count"]))
{
//已登陆数比授权数少
string id=Session.SessionID.ToString();
arr.Add(id);
Application[username+"_login"]=arr;
}
else
{
//已登陆数大于等于授权数
arr.RemoveRange(0,1); //踢掉第一个登陆的客户端
string id=Session.SessionID.ToString(); //获取当前客户端的SessionID
arr.Add(id);
Application[username+"_login"]=arr; //将最新的登陆授权表ArrayList加给Application
}
}
以上是登陆时的设置。WebForm执行时,要判断是否有权限访问时,执行:
if(Session["user"]==null)
Response.Redirect("login.aspx");
//上面是判断是否登陆过
//下面的代码是判断是否超过授权数
string id=Session.SessionID.ToString();
ArrayList arr=new ArrayList();
arr=(ArrayList)Application[username+"_login"];
if(arr.Contains(id)==false) //当前的SessionID不在登陆列表中
Response.Redirect("logout.aspx") //退出系统
以上是这个授权判断的部分代码。主要思路就是:使用ArrayList存放已登陆的客户端SessionID。当登陆数超过已授权的数量时,踢出最早登陆者。当那个最早登陆者刷新页时,程序会发现他的SessionID不在ArrayList中,即拒绝该客户端访问。
以前有人认为可以使用数据库某个字段来管理这个权限,但是数据库的弱点在于用户关闭浏览器时,不进行任何操作。
我想了个办法,使用Application和Session。大体思路是这样的:
每个登陆的客户端,都有一个SessionID,这些SessionID是唯一性的。
登陆程序先判断用户名密码的正确性,再从数据库中取出该用户名被授权的客户端数,存在一个叫username_count的Application中。
if(LoginCheck()==true)
{
Application[username+"_count"]=objUser.GetAuthCount();
}
用户名密码验证后:
Session["user"]=username; //用户名存Session
if(Application[username+"_login"]==null)
{
//这个用户名之前还没登陆过
string id=Session.SessionID.ToString();
ArrayList arr=new ArrayList();
arr.Add(id);
Application[username+"_login"]=arr;
}
else
{
//该用户名已经登陆过
ArrayList arr=new ArrayList();
arr=(ArrayList)Application[username+"_login"];
if(arr.Lenth<Convert.ToInt16(Application["username+"_count"]))
{
//已登陆数比授权数少
string id=Session.SessionID.ToString();
arr.Add(id);
Application[username+"_login"]=arr;
}
else
{
//已登陆数大于等于授权数
arr.RemoveRange(0,1); //踢掉第一个登陆的客户端
string id=Session.SessionID.ToString(); //获取当前客户端的SessionID
arr.Add(id);
Application[username+"_login"]=arr; //将最新的登陆授权表ArrayList加给Application
}
}
以上是登陆时的设置。WebForm执行时,要判断是否有权限访问时,执行:
if(Session["user"]==null)
Response.Redirect("login.aspx");
//上面是判断是否登陆过
//下面的代码是判断是否超过授权数
string id=Session.SessionID.ToString();
ArrayList arr=new ArrayList();
arr=(ArrayList)Application[username+"_login"];
if(arr.Contains(id)==false) //当前的SessionID不在登陆列表中
Response.Redirect("logout.aspx") //退出系统
以上是这个授权判断的部分代码。主要思路就是:使用ArrayList存放已登陆的客户端SessionID。当登陆数超过已授权的数量时,踢出最早登陆者。当那个最早登陆者刷新页时,程序会发现他的SessionID不在ArrayList中,即拒绝该客户端访问。
相关文章推荐
- 如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法
- ASP.NET如何实现服务器端身份验证和客户端状态管理?(Session机制和Cookie)
- ASP.NET MVC 如何在一个同步方法(非async)方法中等待async方法
- 批量删除记录时如何实现全选方法总结 (转)http://www.cnblogs.com/chenou/articles/1349646.html[Asp.net Ajax 控件]
- ASP.NET MVC环境下实现一个网站多个网站模板的方法
- 客户端调用服务器端方法——ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional实现之小小比较
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- ASP.NET MVC:如何实现一个自己的ModelBinder?
- asp.net一个实现发送邮件的方法
- ASP.NET防止同一个帐号多个用户同时登陆的解决方法
- asp.net core 实现一个简单的仓储的方法
- 页面中包含同一个asp.net控件多次,如何产生不同的javascript方法名
- 客户端调用服务器端方法——ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional实现之小小比较
- 客户端调用服务器端方法——ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional实现之小小比较
- Asp.net中实现同一用户名同时登陆,注销先前用户(转)
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- Asp.net MVC 限制一个方法到指定的Submit按钮
- Asp.net项目同一个用户后登录把前面登录的踢下线的两种实现方法