Php 限制同时登录

Php 限制同时登录,php,yii,Php,Yii,我试图在我的yii应用程序中限制同时登录(相同的用户名和密码),为此我在用户表“login\u status”中添加了一个字段。如果用户已登录,则登录状态=1如果用户使用应用程序注销图标正确注销,则我们将重置为登录状态=0 基于此登录状态,我们限制同时登录(登录状态=1,抛出错误“用户已连接”) 但当用户关闭浏览器选项卡、窗口或系统突然停止时,我们就面临着这个问题。始终登录\u status=1,抛出错误“用户已连接” 请任何人帮我解决这个问题 超时怎么样?如果您的用户在半小时内没有执行任何操作

我试图在我的yii应用程序中限制同时登录(相同的用户名和密码),为此我在用户表“login\u status”中添加了一个字段。如果用户已登录,则登录状态=1如果用户使用应用程序注销图标正确注销,则我们将重置为登录状态=0

基于此登录状态,我们限制同时登录(登录状态=1,抛出错误“用户已连接”)

但当用户关闭浏览器选项卡、窗口或系统突然停止时,我们就面临着这个问题。始终登录\u status=1,抛出错误“用户已连接”


请任何人帮我解决这个问题

超时怎么样?如果您的用户在半小时内没有执行任何操作,会话将自动关闭,用户状态再次为0。 问题是,当用户执行任何操作时,您必须进行日志记录。
也许还有更好的解决方案?

没有直接的方法。您需要强制服务器自动执行一些检查。您应该使用类似于
Cron Job
的东西。表中应该有一个类似于
last\u access\u date\u time
的字段。每次用户在系统中运行操作时,该字段都将更新。现在您需要编写一个脚本,例如在服务器上每5分钟运行一次。此脚本为每个用户检查用户
last\u access\u date\u time
,如果该字段大于5分钟前,则应为用户设置
login\u status=0
。您可以搜索Cron作业来学习如何在服务器上运行计划任务。

除非用户正确注销(通过按钮),否则我看不出您如何在没有某种超时延迟的情况下强制执行这种行为。这是假设用户将从不同的浏览器&ip登录到他的帐户。如果来自同一浏览器或IP,您可以使用或停止重复登录。

您可以在每次登录用户执行操作时设置登录状态,也可以在此字段中添加日期时间。现在您知道用户上次活动的时间了。
如果新用户登录并且日期时间超过会话超时时间,则您知道该用户已注销。您可以登录新用户。

您只需将用户的最后一个操作记录为日期时间,然后仅在用户登录时检查此项。这样就不需要Cron作业。