关于同一用户不能同时在两台电脑上登录问题的解决方案
今天接着做昨天的事情,有几个技术上的问题都顺利解决了。原来,一切都并不是想象中的那么复杂。有些事情,即使没有百分百的把握,也得冒险一搏。
这次的单子有两个重点:
一、当某一用户在一天之内连续3次错误登录以后,限制30分钟内不可再次登录系统;
二、同一用户不能同时在两台电脑上访问系统,有点类似于QQ的登录验证机制。
具体的代码就不说了,我只是想记录一下思路,算是一个复习吧。
针对第一个问题,我是在网上查了一下资料以后才找到解决办法的。由于在同一天内错误登录了三次之后,无论是清空浏览器缓存,清空session和cookie,或者更换浏览器,甚至更换电脑都无法进行登录。那就说明,错误的记录信息是保存在服务器端的。下面我按照分步骤的方式来做说明。
一、在系统中建立一个错误登录日志表,包含以下五个字段: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/
关于同一用户不能同时在两台电脑上登录问题的解决方案相关推荐
- 两台电脑上zotero+坚果云同步文件夹混乱的问题
两台电脑上zotero+坚果云同步文件夹混乱的问题 问题背景 解决思路 具体操作 问题背景 需要在两台电脑上使用zotero+坚果云同步的方案,由于第一次设置经验不足,出现了同步文件夹混乱的情况,提示 ...
- win10两台电脑上的两台虚拟机互联
前期准备: win10电脑两台(需要在同一局域网) vmware15版虚拟机--系统为centos7.3 开始配置: 1.关闭所有的防火墙(两台机器分别操作) 2.设置虚拟机的网络连接方式--桥接模式 ...
- 两台电脑上的虚拟机之间相互通信
我们的目标是想要在两个真实节点上的虚拟机之间实现互相通信. 我是在一台电脑上用VMware部署两个虚拟节点,一个master,一个node,组成一个小型kubernetes集群架构.现在的问题是,我想 ...
- windows下同局域网中MySQL在两台电脑上的连接
1.将A,B两台电脑连接到同一个局域网,比如通过无线(有线)连接到同一个路由器: 2.关掉防火墙和杀毒软件,必须关闭否则不能建立互通的连接(目前我知道的是): 3.进入B电脑的dos控制台查询ip地址 ...
- VirtualBox 两台电脑上的虚拟机之间相互通信
因为要做一个Window Server 群集的测试,手头没有电脑资源,于是考虑用安装多台虚拟机来实现,这里主要解决虚拟机与主机所在局域网内其他电脑的连通问题. 参考:https://blog.csdn ...
- 两台电脑上的虚拟机相互通信
实现方法:在这里我们虚拟机的网络连接选用桥接的方式 首先查询本机的ip: 然后创建虚拟机: 在虚拟机设置中网络适配器中选择桥接模式: 随后点击编辑中的虚拟网络编辑器 选择更改设置并选择桥接模式: 查看 ...
- 成功在两台电脑上安装了spark集群,mark下
一.首先查找linux系统下的集群master的ip地址:如图所示: 二.然后在windows电脑上访问该ip地址:端口:50070 这个只是启动了Hadoop集群:
- Cadence OrCAD Capture CIS ODBC数据库文件在两台电脑上同步使用时一台电脑启动失败的问题解决图文教程
- 两台电脑用网线直连传文件
步骤1:将两台电脑用网线连接起来. 步骤2:这时分别修改两台电脑上的数据. 第一台电脑:单击控制面板--查看网络状态和任务--查看活动网络--本地连接--属性--Internet协议版本4,在弹出的对 ...
最新文章
- 第九章 硬件抽象层:HAL 心得笔记
- docker 容器占用内存_如何限制Docker容器的内存
- 千里之堤毁于蚁穴------重点项目不能交付之谜(一)泥淖中的验收测试
- C#Redis集合set
- TCP、UDP以及HTTP的简单讲解
- mysql的wait_timeout配置
- How does a relational database work
- python继承语法_python中继承父类的例子(python3的语法)
- 360,选择顶你还是拍你啊?
- Android实现EditText插入表情、超链接等格式
- 中文版Postman测试需要登陆才能访问的接口(基于Cookie)
- 前端开发-jQuery基本语法
- Asterisk-Javanbsp;教程(中文版)…
- 【python】if __name__==‘__mian__‘ 如何理解,原理及作用
- Python爬虫之链家二手房数据爬取
- UI设计中线面结合图标设计总结
- RetinaNet模型在DDSM数据集的应用问题(2)
- java自定义font_java – 设置自定义字体
- 确认main_arena相对libc的偏移地址
- SylixOS x86 HPET 定时器驱动