在用户和密码正确更新用户设置标志1后,我有一个带登录系统的网站,不允许其他人同时与该用户连接
$sql="update user set flag = 1 where id_user =".$_SESSION['id_user'];
我有一个logout.php,当我点击退出按钮时,我将标志重置为0,但我还想在用户关闭浏览器时将标志更改为0。
我试图解决它: javascript / jquery onbeforeunload卸载和 会议陷入困境但我失败了
答案 0 :(得分:1)
你不能这样做。
登录后,您应检查会话存储区是否有请求登录的用户的会话。这当然需要一个你可以实际检查的会话商店,即。在数据库中。
答案 1 :(得分:1)
我有一个建议用PHP解决,忘记了JavaScript
存储数据库中已记录用户的最后一个请求时间,可能在用户表的字段中以及cookie中(客户端)。因此,每次用户发出请求时,都要将用户表上的此字段更新为当前时间和cookie。
如果有人尝试与拥有flag = 1
的用户建立联系,请验证上次请求时间。如果它是五分钟(或十分钟,或二十分钟或其他)分钟或更长时间,请允许登录。如果它少于此时间,则不允许。
如果允许,那么我们有两个人在系统中有一个会话,所以两个都被记录,这是一个问题。
要解决此问题,当其中任何人尝试查看该页面时,如果存储在cookie(客户端)中的最后一个请求时间与存储在数据库中的时间不同,那么销毁会话。如果相等,则允许导航,并再次更新上次请求时间(在cookie和数据库中)。
这个想法是五分钟(或十分钟,或二十分钟或其他什么)不活动的分钟意味着用户离开。
您还可以将session.gc_maxlifetime
中的php.ini
更改为较短的时间。例如,到五分钟,尝试:
session.gc_maxlifetime=300
更改php.ini
后,重启Apache。
答案 2 :(得分:0)
这样做是个坏主意。如果要检查用户登录,则需要更多参数,而不仅仅是标记用户登录。我同意@Helinton Mello,您可以在用户上次登录之前检查时间,如果用户在10分钟前登录,标志仍然为1,则可以授予他登录权限,但是如果用户在10分钟以内,则可以发出另一个通知例如“您已经登录,请联系您的管理网络”。