如何在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登陆的方法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭