如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法

原创 2005年05月28日 18:31:00

最近做了个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_解决vs运行报在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题的bug方法

由于工作需要对原来一个项目做修改,结果遇到了麻烦。原来一般是在本机安装32位的oracle客户端,PLSQL Developer当时不支持64位,运行项目也没问题。但是现在下载了个最新版的PLSQL ...
  • ls_man
  • ls_man
  • 2016年06月24日 11:48
  • 1260

ASP.NET获取客户端IP地址相关方法

 因为要在项目中取到客户端IP,在网上搜了下相关资料,其中有一篇文章总结的比较详细,这里就把一些我用的上总结一下 方便以后查阅.  通常我们都通过下面的代码获得IP:    string ...

在 ASP.NET 页面中包括客户端脚本的方法

http://www.cnblogs.com/lazeman/archive/2011/01/21/1941473.html 主要包括以下三种方法:以静态方式将客户端脚本包括在含有代码或使用 incl...

ASP.NET获取真正的客户端IP地址的6种方法

在ASP中使用  Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不...

使用ASP.NET AJAX异步调用Web Service和页面中的类方法(7):服务器端和客户端数据类型的自动转换:泛型集合类型

====================================================== 注:本文源代码点此下载 =============================...

使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型

====================================================== 注:本文源代码点此下载 =============================...

asp.net mvc 批量保存 服务端获取客户端传进的数组参数的处理方法

在Ajax + asp.net mvc 里,如果需要将一个数组作为参数传给Action来保存,这时候,需要对这个参数进行额外处理,如果不处理,服务端获取到的数组只是获取到数组的个数。而对象的属性是为N...

MVC学习笔记之:ASP.NET MVC的客户端验证-jQuery.validate验证结合Model验证中的实现

关于JQuery.validate客户端验证,可以在网上找找资料,Jquery Validate客户端验证 jQuery验证控件jquery.validate.js使用说明+中文API 结合ASP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在ASP.net中实现限制一个用户名在多个客户端IE登陆的方法
举报原因:
原因补充:

(最多只允许输入30个字)