关于同一用户不能同时在两台电脑上登录问题的解决方案

今天接着做昨天的事情,有几个技术上的问题都顺利解决了。原来,一切都并不是想象中的那么复杂。有些事情,即使没有百分百的把握,也得冒险一搏。

这次的单子有两个重点:

一、当某一用户在一天之内连续3次错误登录以后,限制30分钟内不可再次登录系统;

二、同一用户不能同时在两台电脑上访问系统,有点类似于QQ的登录验证机制。

具体的代码就不说了,我只是想记录一下思路,算是一个复习吧。

针对第一个问题,我是在网上查了一下资料以后才找到解决办法的。由于在同一天内错误登录了三次之后,无论是清空浏览器缓存,清空sessioncookie,或者更换浏览器,甚至更换电脑都无法进行登录。那就说明,错误的记录信息是保存在服务器端的。下面我按照分步骤的方式来做说明。

一、在系统中建立一个错误登录日志表,包含以下五个字段:ID,用户名,(最后)登录时间,(最后)登录IP,登录错误次数,下一次允许登录的时间。

二、用户登录时,首先进行一项准备工作:删除当天以前的所有错误登录记录(delete from tb_failLog where datediff(day,loginTime,getdate())>0 )。这样做的目的是为了清除表中的数据冗余。然后检查错误登录用户表中是否存在该用户的错误登录记录,如果不存在,则继续进行密码验证等逻辑判断;如果存在,那么检查该用户当天的错误登录次数是否已经超过了系统限制的次数,然后再进行逻辑判断:

1)如果已经等于或大于了系统限制,那么接着验证系统的当前时间是否大于了允许该会员下次登录的时间。如果当前时间小于允许该用户登录的时间,就直接提示该用户:您今天的登录次数已经超过了系统限制,请于系统允许的登录时间后再试。反之,则转入密码验证等逻辑判断。

2)如果该用户的错误登录次数小于系统限制,那么也接着进行密码验证等逻辑判断。

三、用户登录错误以后,查询该表中是否具有该用户的登录错误记录,进行如下逻辑判断:

1、如果没有该用户的错误登录记录,那么写入一条新记录,该条记录中的“下一次允许登录的时间”应该是当前时间+30分钟。

2、如果有该用户的错误登录记录,那么将该用户的错误登录次数加1,同时修改最后登录时间,最后登录IP,以及设置系统下次允许的登录时间为当前时间+30分钟。

四、用户登录成功以后,删除该用户的所有错误登录记录。

这个解决办法不会给系统数据库造成太大的负担,因为数据都是即时删除掉的,最多也只会保存当天的记录。

针对第二个问题,其实我是在查了CSDN论坛上的一篇帖子之后才解决的。楼主问的问题其实和我所面对的问题完全一样。解决办法分以下五个步骤:

一、在系统中建立一个在线用户表,当用户登录系统以后,将该用户的用户名,登录时间(也叫最后活跃时间,将在后续步骤中用到),登录IP写入表中。

二、用户登录时,先检查该用户是否已经在线,若已经在线,则提示其账号已经在别处登录。

三、用户打开页面时,更新用户的最后活跃时间(也有人称之为“心跳时间”,我觉得这个比喻很贴切),同时,进行一些额外的检查(将在第五步中提到)。

四、用户正常退出系统时,删除在线用户表中的该条记录,请注意,这里说的是“正常退出”,即用户必须点击点击了系统中的“退出”链接。然后顺利的退出系统。

五、考虑到用户非正常退出的情况,比如浏览器崩溃,甚至电源突然断掉,中途断网等不可预测因素。可能会导致某一用户当前已经不在线了,但在线会员表中还是存在该会员的记录。这就需要检查用户的最后活跃时间。于是在第三步的操作中同时增加一个操作:删除最后活跃时间与当前时间相差大于10分钟的在线用户记录(delete from tb_userOnLine where datediff(minute,lastTime,getdate())>10)。

由于数据都是即时删除的,所以,系统的在线用户表不会存在太多的记录,及时有1000人同时在线,数据库的压力也不会有多大。

好了,到此为止,问题已经全部解决了。网上也有说用application来保存信息的,可我个人觉得,这样对服务器的压力太大了。

    或许这个设计思路还有漏洞,欢迎各位指出,在此先行谢过!另外,如果还有更先进的设计方法,也请说出来大家一起学习学习,再次感谢!

原文地址:http://www.cnblogs.com/miaoxiao/archive/2009/10/23/1588572.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-617274/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16436858/viewspace-617274/

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: k3客户端和中间层组件不能同一台计算机上解决办法有以下几点: 1. 资源利用率:中间层组件通常需要大量的计算与存储资源,而k3客户端也需要一定的计算资源。将它们分开部署在不同的计算机上,可以有效地分摊资源负载,提高整体的资源利用率。 2. 安全性:中间层组件是系统的核心,负责处理和存储重要的数据,对系统的安全性有着重要的影响。与之相比,客户端的安全性要求相对较低。将它们分开,可以更好地保护中间层组件的安全。 3. 系统稳定性:将k3客户端和中间层组件部署在不同的计算机上,可以降低单点故障的风险。当其中一台计算机发生故障时,另一台计算机可以继续提供服务,避免系统的整体崩溃。 4. 扩展性:如果在同一台计算机上部署k3客户端和中间层组件,当需要扩展系统规模时,可能会面临资源不足的问题。而将它们分开部署,可以根据需要分别对客户端和中间层组件进行扩容,提高系统的可扩展性。 综上所述,将k3客户端和中间层组件部署在不同的计算机上,可以提高资源利用率,增强系统安全性,提升系统稳定性和扩展性。这是解决k3客户端和中间层组件不能同一台计算机上的有效方法。 ### 回答2: K3客户端和中间层组件不能同一台计算机上解决的主要原因是避免单点故障和提高系统的稳定性和性能。 首先,将K3客户端和中间层组件部署在同一台计算机上,容易产生单点故障。如果该计算机发生故障或崩溃,会导致K3客户端和中间层组件同时不可用,从而影响系统的正常运行。而将它们分别部署在不同的计算机上,可以避免这种单点故障的影响。即使一台计算机出现问题,也不会影响其他计算机上的组件运行,系统可以继续提供服务。 其次,将K3客户端和中间层组件分别部署在不同的计算机上,有助于提高系统的稳定性和性能。中间层组件通常是承担着数据处理、逻辑控制等重要任务,在高负载情况下可能需要大量的计算资源。如果与K3客户端运行在同一台计算机上,可能会导致资源竞争和系统负载过高的问题。而将它们部署在不同的计算机上,可以将资源分配得更加合理,减少资源争用,提高系统的稳定性和性能。 此外,将K3客户端和中间层组件分别部署在不同的计算机上,还有利于系统的扩展和维护。如果将它们部署在同一台计算机上,那么在需要扩展系统规模时,需要对该计算机进行升级或更换。而如果它们分别部署在不同的计算机上,可以根据需要独立扩展某个组件的计算资源,更加灵活和方便。 因此,为了避免单点故障、提高系统的稳定性和性能,以及便于系统的扩展和维护,我们应当将K3客户端和中间层组件部署在不同的计算机上。 ### 回答3: 在同一台计算机上,K3客户端和中间层组件不能直接安装和运行的原因主要有以下几点: 1. 资源冲突:K3客户端和中间层组件可能在使用的资源上存在冲突,比如端口号、配置文件、共享库等。如果在同一台计算机上同时运行,可能会发生资源冲突导致无法正常工作。 2. 性能问题:K3客户端和中间层组件可能会占用较多的系统资源,包括内存、CPU等。如果在同一台计算机上运行,可能会导致系统负载过高,影响整体的性能和响应速度。 3. 安全性考虑:K3客户端和中间层组件可能具有不同的安全级别或权限要求。将它们分开部署可以更好地控制和管理安全性,避免可能的安全漏洞或权限问题。 因此,在解决上述问题的同时,可以采取以下办法来解决K3客户端和中间层组件不能同一台计算机上的问题: 1. 使用独立的物理或虚拟机:将K3客户端和中间层组件分别安装在独立的物理或虚拟机上。这样可以避免资源冲突,实现彼此的独立运行。 2. 使用网络通信:在不同的计算机上部署K3客户端和中间层组件,通过网络通信进行数据传输和交互。可以使用合适的协议和接口来实现它们之间的通信。 3. 设置合理的安全策略:根据实际需求和安全级别,制定合理的安全策略。确保K3客户端和中间层组件之间的通信和数据传输安全可靠,避免潜在的安全风险。 综上所述,通过将K3客户端和中间层组件部署在不同的计算机上,合理分配资源和划分权限,可以解决它们不能同一台计算机上运行的问题,确保系统的稳定性、性能和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值