ASP.NET防止同一个帐号多个用户同时登陆的解决方法
来源:互联网 发布:linux deepin安装教程 编辑:程序博客网 时间:2024/05/16 18:37
该解决方案是在ASP.NET下解决的,创建一个用户登录表,记录下每一个用户登录系统的信息,其表结构如下:
字段
类型
说明
User_id
Varchar(22)
用户ID号
User_address
Varchar(15)
用户访问系统时的IP地址
Last_datetime
Datetime
用户最后访问系统的时间
Login_status
Int
用户在线状态 0:离线 1:在线
一.在创建用户的时候,向登录表中自动添加一条信息(注意:初始化信息要确保其在线状态为0,即离线状态)
二.在用户登陆的时候,User_address记录下用户使用的计算机的IP地址,Login _status被设置为1,系统将事实记录下用户操作系统时的时间到last_datetime中,退出的时候将把该状态设置为0。如果用户是正常退出,则该状态可以正常的设置为0,但是如果用户时非法退出系统,服务器端没有办法得到客户端退出的消息,则Login_status仍然为1,所以下次用户登录的时候就不能只凭Login_status来判断用户是否在线。我是利用Use_addrss和Last_status这两个字段来解决的,我的具体解决方法是:
1.验证登录,该伪代码为:
If (当前用户IP地址上是否有其他已经登录的用户)
Begin
If(用户登录帐号是否是本地计算机上已经登录的用户)
允许登录;
Else
ShowMessage(“已经有其他用户在本机登录!”);
End
Else
Begin
If(用户是否已经登录)
ShowMessage(“该用户已经登录,请稍后再试!”);
Else
允许登录
End
说明:
1判断用户所在计算机是否还有其他用户是否已经登录,从而使得一台计算机也只能同时登录一个用户
2判断用户登录帐号是否是本地计算机上已经登录的用户,使得用户如果非法退出系统,仍然可以使用原来登录的帐号继续登录。
3如果本地计算计算机没有其他登录的用户,就判断登录的帐号是否已经在其他计算机上登录,如果没有,才可以登录,这样就保证了同一个帐号无法使多个用户同时登录。
先判断Login_status是否为0,如果为1,则再判断当前时间与用户最后一次访问时间之差是否大于你所限制的Session对象的超时时间,如果大于,则说明上次使用该帐号登录的用户已经离线,可以登录,否则不允许登录
2.更新用户最后一次访问系统的时间:
在ASP.NET中,有Application_EndReqest事件,每一个用户在客户端对系统做任何事情,都会响应该事件,所以可以时时获取用户最后一次访问系统的时间,将该时间更新到系统登录表中的Last_datetime字段中。在Applicatin_EndRequest事件中,不能使用Session变量,所以只能获取用户的IP地址,和服务端限制的Session对象的超时事件限制。
因为前面已经提到,每台计算机只能同时有一个用户登录,所以,可以根据用户的IP地址,得到最后一个在本机使用的用户帐号user_id,该用户如果Login_status=1,并且last_datetime与当前时间之差小于所限制的时间长,则说明当前在线的用户就是该帐号,则更新该访问时间。
3.退出
在退出时,如果是点击退出按钮退出,则响应退出事件,将Login_status置为0。如果是其他方式退出,没有办法响应退出事件,则Login_status仍为1,下次用户登录的时候,可以先根据登录计算机的IP地址判断是否可以登录,否则,只能最后一次访问时间和当前时间做对比来判断用户是否可以登录。
- ASP.NET防止同一个帐号多个用户同时登陆的解决方法
- ASP.NET防止同一个帐号多个用户同时登陆的解决方法
- ASP.net中怎么控制同一个用户在多个地方同时登陆服务器?
- ASP.NET防止用户同时登陆
- ASP.NET 防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- ASP.NET 2.0防止同一用户同时登陆
- ASP.NET 2.0防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- ASP.NET 2.0防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- ASP.NET 2.0防止同一用户同时登陆
- asp.net 2.0防止同一用户同时登陆
- ASP.NET 2.0 防止同一用户同时登录/登陆
- ASP.NET 2.0防止同一用户同时登陆
- 解决打印机不能打印字体的情况。
- 悼念巴金
- 收购的游戏王国:EA二十年收购记
- linux指令大全(完整篇)
- 霍夫变换(Hough Transform)
- ASP.NET防止同一个帐号多个用户同时登陆的解决方法
- 数据库设计规范 V2.0
- 你需要的也许只是一块面包
- Appfuse中常用的ant指令(引用自http://blog.csdn.net/IceCraft/services/trackbacks/505379.aspx )
- 2005.10.15 - 2005.10.17
- SQL Server 2000中的触发器使用
- MS SQL 2005中的系統表探索(System Base Tables)(II)
- AJAX与微软的新方案
- ERP-企业管理的利器(载自http://blog.csdn.net/whchen处)