我有一个脚本,将登录和注销用户。它工作得很完美。现在我有了一个小工具,可以统计有多少用户注册和激活,以及有多少用户在线。为此,我在用户数据库中设置了一个字段,说明online =1或0。当用户登录时,在线=1,在线注销= 0。现在我还没有考虑到这个字段仅仅是因为用户正在做一些事情才被更新的。我还没有考虑到会话会超时。
如果会话超时= true,那么如何更新用户set online=0 where username=$username和user_id=$user_id之类的内容。
发布于 2013-03-05 03:29:08
在数据库表中,添加另一个类似于last_seen的列。每次你看到你的用户在线时都要更新它。在一段时间不活动后,它们将被标记为不活动。实际上,我建议您将online字段替换为以下内容。
例如,
ALTER TABLE users CHANGE COLUMN `online` `online` DATETIME; -- SAMPLE SQL query only要检查有多少用户在线,请执行以下操作:
SELECT * FROM users WHERE online>(NOW()-INTERVAL 1 HOUR); -- SELECTS all users online in the past hour.如果用户注销,您只需设置online = NOW()-INTERVAL 1 HOUR即可。或者,您也可以保留以前的online字段,并可以检查用户是空闲的(使用我的建议)还是online=0。
发布于 2013-03-05 03:28:01
尝试使用时间戳,而不是尝试使用布尔值来查看某人是否已登录。然后,您可以根据某人离开的时间长短执行更精确的逻辑。如果上一次有人在你的网站上加载页面是在30分钟前,你认为他们是在线的吗?你觉得他们会在键盘前吗?
发布于 2013-03-05 03:28:19
只有当您希望会话超时时,它才会超时。这个问题实际上是'How do I expire a PHP session?‘的翻版。
代码仅在提供php页面时执行,因此您需要使用会话变量跟踪用户最后一次活动的时间,以跟踪页面最后一次提供给该用户的时间。然后,每当向用户提供任何php页面时,都要检查超时时间是否已过,如果超时时间已过,则注销用户,请参阅link的示例。
https://stackoverflow.com/questions/15209373
复制相似问题