如何计算在线用户?

时间:2020-03-21 12:28:00

标签: php mysql session count

我试图计算现在在线的用户,所以我进行了这两个查询

登录时

$id = $_SESSION['id'];
$up = mysqli_query($conn,"UPDATE user_account SET status= 1 WHERE id='$id'");

注销时

$id = $_SESSION['id'];
$up = mysqli_query($conn,"UPDATE user_account SET status= '0' WHERE id='$id'");

0 值表示离线,而 1 值表示在线,因此可以正常工作,但是我在隐身浏览器模式中尝试了此操作到一个帐户,然后我关闭了隐身浏览器模式,并且seassion ID仍然存在,并且永远不会转为0,有什么办法可以防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

除非用户告诉服务器,否则您的服务器永远无法知道用户的操作。因此,人们实现了会话超时。如果用户在一段时间内没有任何活动,则可以认为他们已经走开了。

您可以在数据库表中创建名为DATETIME类型的#virtualenv install pip install --upgrade tensorflow #system install pip3 install --user --upgrade tensorflow 的其他列,并且每次用户向服务器发出请求时都将对其进行更新。如果要统计活动用户,只需查询以获取最近活动的用户。

last_active

警告::您对SQL Injections持开放态度,应使用参数化的准备好的语句,而不是手动构建查询。它们由PDOMySQLi提供。永远不要相信任何输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!

答案 1 :(得分:-1)

从逻辑上讲,您永远无法知道用户是否关闭了浏览器(无论是隐身模式还是正常模式),关闭计算机或任何其他可能性。仅当用户通常使用站点中的按钮注销并且不计算其他任何方式时,才关闭(2) [{…}, {…}] 0: company_logo: "https://remoteok.io/assets/jobs/07a835281c655f47e04cd5799f27d219.png?1584688805" job_description: "\nScalable Path is looking for a Senior Full Stack.." __proto__: Object 1: company_logo: "https://remoteok.io/assets/jobs/9e96332ed226d8ffd20da84b6951b66e.png?1584649206" job_description: "\nScalable Path is looking for a Senior Full Stack.."

一种方法是处理所有会话。您可以找到一些信息here。这样也不会立即关闭status

最佳方式:

但是,我建议您在站点上使用JavaScript来告知服务器用户在线,例如,每分钟(或用户与站点进行交互的任何时间,包括对服务器的任何请求)。并在数据库中设置一个status值以存储每个用户在该站点上的最近活动,因此您可以设置一个限制,例如,如果该距离用户的上一次活动超过5分钟,则该用户处于离线状态,否则他/她在线。

相关问题