PHP实现同一个帐号不允许多人同时重复登陆

转载 2016年05月24日 11:34:56
数据库表 user_login_info
字段:id,user_ip,user_id,last_access_time
user_id 做唯一性索引
1. 用户登录后
如果没有当前用户我的百分之一的数据,插入一条数据,user_ip(用户机器的IP),user_id(用户ID),last_access_time(当前登录时间)
如果已经存在,则更新 user_ip,last_access_time 2个字段
2. 如何判断?
另一个用户,如果用相同的账号
1)在同一台机器上再次登录的情况 【ip相同】,直接更新这个用户的 last_access_time 时间为最新时间就可以了。
处理:直接更新 shop.inernetwork.net last_access_time 为最新时间
2)在另外一台机器上登录的情况【ip不同】,根据user_id取出数据,判断ip和last_access_time(上次登录时间),
如果当前时间 now()-last_access_time < 10 (分钟) 【这里是关键,设置一个时间】,说明有人在其他机器上已经登录了,则不允许登录。
now()-last_access_time > 10 (分钟) ,则可以登录,说明另一个人要不已经有10分钟没有活动了,要不就是没登陆,这2种情况下都允许重新登录。
3. 在程序的入口文件 index.php (ZF框架参考),每次用户登录后的操作,都更新 last_access_time 时间为最新时间 (这个也许效率上需要考虑一下,其实也应该没什么问题,数据库完全可以承受,也可以在程序里加上一个判断,last_access_time 时间存在 session里,如果这个时间跟当前时间 date() 比较,超过设定的10分钟时间,则更新数据库 last_access_time 字段。这样可以减少更新数据库的次数)
4. 异常退出的情况,比如用户直接关闭浏览器,数据库里还有这条记录,因为设置的过期时间是10分钟,所以如果同一个用户立刻再次登录的情况下,肯定不行,会 提示已经有人登陆了。但10分钟后就可以再次登录,所以这个10分钟时间看具体情况,可以设置成 1分钟,或其他时间。
但这个时间不要设置成几个小时,那用户会疯掉。
原理:就是设置一个过期时间的技巧和记录IP。
一,会员表加一个字段(last_session),会员登陆时获取当前SESSIONID更新此字段。
二,会员登陆时取得该(last_session)值去session_save_path看该文件有没有,如有则直接删除。
三,假如有两个人以上同时使用的话,那么前一个的会话文件就会被后面的一个所删除,也就被逼下线了。
这样也就达到了每次只能一个帐号使用的目的了,虽然用户体验略差,但也算是较高效的方法了。
举报

相关文章推荐

PHP session 防止重复登录

zhclass.php<?php// 选则表单 class zhClass { public $zh; // 账号 public $mm; // 密码 publi...

PHP验证登录用户名和密码

登录页面 login.html 负责收集用户填写的登录信息   用户登录 用户名: 密 码: 登录处理 login.php 负责处理用户登录与退出动作。 ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

PHP,如何防止同一用户同一时间多次登录?

【问题描述】 同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重...

用PHP实现同一个帐号不允许同时登陆,只允许一个帐号登录?

数据库表 user_login_info 字段:id,user_ip,user_id,last_access_time user_id 做唯一性索引 1. 用户登录后 如果没有当前用户的数据,...

PHP简单利用 token 防止表单重复提交

<?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_SES...

PHP,如何防止同一用户同一时间多次登录

转载链接:http://blog.sina.com.cn/s/blog_4832ea590101djnp.html PHP,如何防止同一用户同一时间多次登录? 创建表         userna...

php实现一天多次登录,只积分一次功能

在网上找了很多的案例,感觉都差不多,有的还比较的繁琐,就自己尝试了一下,如何实现这个功能 实现这个功能我在数据表里面增加了一个字段logintime,表示最后一次的登录时间,然后使用一天中的零时零分...

关于PHP如何用实现防止用户在浏览器上使用后退功能重复提交输入

博主Bruce刚开始搞后台的时候手总是不安分,在后台系统账号登出之后,忽然萌生想法,再点击浏览器的返回键会是什么样的情况呢? 首先这是账号登出的截图 账号登出成功之后,然后...

PHP,如何防止同一用户同一时间多次登录

PHP,如何防止同一用户同一时间多次登录   PHP,如何防止同一用户同一时间多次登录? 创建表          username   password...

PHP实现同一个帐号不允许多人同时重复登陆

数据库表 user_login_info 字段:id,user_ip,user_id,last_access_time user_id 做唯一性索引 1. 用户登录后 如果没有当前用户我的百分...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)