3

我有一个脚本可以登录和注销用户。它完美地工作。现在我有一个小部件,它可以计算注册和激活的用户数量以及在线用户数量。我通过在我的用户数据库中有一个字段表示 online = 1 或 0 来做到这一点。当这个人登录时,online = 1 并注销 online = 0。现在我没有考虑到这个字段只是被更新因为用户正在做某事。我没有考虑到会话会超时。

如何创建一个函数,如果会话超时 = true 然后更新用户设置在线 = 0 其中用户名 = $ 用户名和 user_id = $ user_id。

4

4 回答 4

3

在您的数据库表中,添加另一列,例如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-04T19:29:07.613 回答
3

与其尝试使用布尔值来查看是否有人登录,不如尝试使用 TIMESTAMP。然后,您可以根据某人离开的时间执行更准确的逻辑。如果有人最后一次在您的网站上加载页面是 30 分钟前,您认为他们在线吗?你甚至认为他们在他们的键盘上吗?

于 2013-03-04T19:28:01.480 回答
0

添加 lastOnline 字段,该字段存储上次用户活动的时间戳。在页面上有一些 ajax 函数,每“n”秒更新一次时间戳。

要检查用户是否在线 - 同时检查:在线字段和时间戳。如果时间戳在“n”秒前更新 - 即使在线字段等于 1,用户仍处于离线状态。

于 2013-03-04T19:29:20.317 回答
0

会话只有在您希望它这样做时才会超时。这个问题实际上与“如何使 PHP 会话过期?'

代码仅在提供 php 页面时执行,因此您需要跟踪用户上次活动的时间,我使用会话变量来跟踪页面上次提供给该用户的时间。然后,每当向用户提供任何 php 页面时,请检查超时期限是否已过,如果已过,请注销用户,请参阅链接以获取示例。

于 2013-03-04T19:28:18.917 回答