如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法
最近做了个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中,即拒绝该客户端访问。
- 如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法
- 如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法
- ASP.NET实现URL重写方法之二(只要下载一个URLRewriter.dll )
- 用ASP.NET做项目,本本上的系统是XP,网上下载了IIS6,安装完后出现HTTP500问题,解决之.接着出现了浏览页面时跳出登陆框让输用户名及密码,GOOGLE了一下,原来是权限不够,解决方法
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- ASP.NET MVC:如何实现一个自己的ModelBinder?
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- 自己实现FormsAuthentication.SetAuthCookie方法,怎样在ASP.NET服务端代码中删除客户端Cookie
- 客户端调用服务器端方法——ASP.NET AJAX(Atlas)、Anthem.NET和Ajax.NET Professional实现之小小比较
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC环境下实现一个网站多个网站模板的方法
- asp.net网站如何获得客户端windows登录用户名
- Redis系列文章总结:ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁
- 在ASP.NET中实现如何下载txt及xml文件的方法
- 如何实现IEnumerable<T>和IEnumerator接口,一个ASP.NET MVC日志模型的实现
- 页面中包含同一个asp.net控件多次,如何产生不同的javascript方法名
- ASP.NET防止同一个帐号多个用户同时登陆的解决方法
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET在不同情况下实现单点登陆(SSO)的方法
- ASP.NET MVC使用ActionFilterAttribute实现权限限制的方法(附demo源码下载)