ASP.NET防止同一个帐号多个用户同时登陆的解决方法

asp.net 实现同一账户不能同时多处登录(单点登录 斜体样式Web 项目中,经常会遇到同一账户不能多处同时登录的问题,相应的解决办法也很多,总结出来也就一下几点: 将登录后的用户名放到数据库表中; 登录后的用户名放到Session中; 登录后的用户名放到Application中; 登录后的用户名放到Cache中。 一般的这几种方法都是登录了之后,如果没有正常退出,第二次登录将不被允许。这样一般都会存在一个问题:如果用户没有正常退出系统,那么他接... 阅读详情

该解决方案是在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_addrssLast_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中实现同一用户名不能同时登陆 Web项目中经常遇到的问题就是同一用户名多次登陆的问题,相应的解决办法也很多. 本文介绍的方法是采用类似于MSN登陆方法,第二次登陆时会把第一次的登陆注销掉,第一次登陆将会类似于MSN弹出:您的帐号已在别处被登陆,您被强迫下线的提示信息。 立即下载

相关推荐

同一个账号同一时间只能允许他登录一次

让一个账号,在同一段时间,只能允许他登录一次

ASP.NET 中实现单点登录

 在ASP.NET 中实现单点登录出自:【孟宪会之精彩世界】 发布日期:2005年1月27日 8点48分0秒由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。 实现思路 利用Cache的功能,我们把用户登录信息保存在Cache中,并设置过期时间为Sessio

Jenry的专栏 1501

Asp.net中实现同一用户名不能同时登录(单点登录)

Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中; 登录后的用户名放到Session中; 登录后的用户名放到Application中; 登录后的用户名放到Cache中。 一般的这几种方法都是登录了之后,如果没有正常退出,第二次登录将不被允许。这样一般都会存在一个问题:如果用户没有正常退出系统,那么他接下来继续登录的时候,因为Session没有过期等问题,会被拒绝继续登录系统,只能等待Session过期后才能登录。本文介绍的方法是采用类似于MSN登陆方法,第二次登录时会把第一次的登录注销掉,第一次登录将会类似于MSN弹出:您的帐号已在别处被登录,您被强迫下线的提示信息。

asp.net用户登录经典解决方案

这里指的单点,泛指在WEB服务端,一个账户同一时刻只能存在一个票据! 大家开发中可能都碰到的一个问题,怎么使同一个用户,在同一时间内只允许登录一次。 很多人都会想到在数据库中用一个标识字段,登录进去置1,退出置0,登录时判断这个字段,如果是1就说明此用户在线,不允许登录,这个方案看似有效,但在实际使用中发现问题很多,比如,用户不是通过程序中的退出按纽退出,而是直接关闭IE,这样的话,下次登录...

weixin_34326429的博客 379

Asp.net 同一用户名不能同时登陆(单点登陆)

转自: http://www.cnblogs.com/whz881027/articles/2105985.html Asp.net中实现同一用户名不能同时登陆(单点登陆) Web 项目中经常遇到的问题就是同一用户名多次登陆的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法:将登陆后的用户名放到数据库表中;登陆后的用户名放到Session中;登陆后的用户名放到Appli

vincent_void的专栏 1203

Asp.net 2.0防止同一用户同时登陆

<br />Web项目中经常遇到的问题就是同一用户名多次登陆的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法:将登陆后的用户名放到数据库表中;登陆后的用户名放到Session中;登陆后的用户名放到Application中;登陆后的用户名放到Cache中。一般的这几种方法都是登陆了之后,如果没有正常退出,第二次登陆将不被允许。这样一般都会存在一个问题:如果用户没有正常退出系统,那么他接下来继续登陆的时候,因为Session没有过期等问题,会被拒绝继续登陆系统,只能等待Session过期后才能登陆。本

hs_values的专栏 449

ASP.NET 2.0防止同一用户同时登陆方法三(转)

Web项目中经常遇到的问题就是同一用户名多次登陆的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法:将登陆后的用户名放到数据库表中;登陆后的用户名放到Session中;登陆后的用户名放到Application中;登陆后的用户名放到Cache中。一般的这几种方法都是登陆了之后,如果没有正常退出,第二次登陆将不被允许。这样一般都会存在一个问题:如果用户没有正常退出系统,那么他接下来继...

ahn32288的博客 143

asp.net防止用户同时登录一个帐号方法

转载:http://www.cnblogs.com/hateyoucode/archive/2010/03/29/1699753.html 在web开发时,有的系统要求同一个用户同一时间只能登录一次,也就是如果一个用户已经登录了,在退出之前如果再次登录的话需要报错。   常见的处理方法是,在用户登录时,判断此用户是否已经在Application中存在,如果存在就报错,不存在的话就加到

498

Asp.Net防止出现用户重复登陆

 在登录按钮中输入如下代码 private void Button1_Click(object sender, System.EventArgs e)  {if(TextBox1.Text=="abc" & TextBox2.Text=="abc")//和数据库验证通过,假设用户名密码均为"abc"   {    //继续判断是否用户已经登陆    Hashtable h=(Hashta

妈妈说:吃得苦中苦,方为人上人。 592

ASP.NET 2.0防止同一用户同时登陆

以下代码可以限制同一个帐号同时登录: 1string key = TextBox1.Text; //用户名文本框设为cache关键字 2        string uer = Convert.ToString(Cache[key]); //读取cache中用户相应的值 3 4        //判断cache中是否用户的信息,如果没有相关的值,说明用户登陆 5        if (ue

hzfu007的专栏 471

asp.net 使用application实现单点登录(一个账号只能在一个地方登录

登陆用户名密码验证通过之后输入以下代码: Hashtable hOnline = (Hashtable)Application["Online"];if(hOnline != null){IDictionaryEnumerator idE = hOnline.GetEnumerator();string strKey = "";while(idE.MoveNext()){if(idE....

abdqcpruwwhyl4931的博客 403

asp.net 限制同一账号同时登录

判断离线以超时为依据,而不是等待用户点击注销。 另外,用户直接关闭窗体就默认为注销,临时转到其他url则要等超时(而不是认为是注销)。 超时判断以10-60秒钟为好再长了就无法用了(同一账号无法及时登录)。 可以使用iframe或者ajax方法,让用户页面异步访问后台,后台从Session中获取用户账号信息,然后在数据库中记录最后一次访问时间。 数据库可以这样设计三个字段: Sess...

weixin_30707875的博客 343

Asp.net防止用户多次登录方法

在web开发时,有的系统要求同一个用户同一时间只能登录一次,也就是如果一个用户已经登录了,在退出之前如果再次登录的话需要报错。 常见的处理方法是,在用户登录时,判断此用户是否已经在  -->Application中存在,如果存在就报错,不存在的话就加到Application中(Application是所有Session共有的,整个web应用程序唯一

fuda_1985的专栏 345

Asp.net项目同一个用户登录把前面登录的踢下线的两种实现方法

1、 使用长连接实现,这种方法建议使用开源的signalR框架; 2、不使用长连接,用户登录系统后,分配一个GUID,主页面定时刷新,对GUID进行匹配,如果符合,不退出系统;不符合,说明这个用户名已经在其它地方登录了,这时退出系统。场景说明:甲使用admin用户登录成功,分配了111这个GUID,主页面每隔20秒刷新一次。过了半个小时,乙也使用admin用户登录,分配了222这个GUID,甲

ddxkjddx的专栏 6151

Asp.net 实现只能允许一个账号同时只能在一个地方登录

先上帮助类: /// <summary> /// 单点登录帮助类 /// </summary> public class SSOHelper { /// <summary> /// 登录后执行 /// </summary> ...

dianzhen5713的博客 606
下一篇: 改进的Tooltip
szhf1980
博客等级 码龄24年 0粉丝 2原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值