PHP,如何计算用户的在线总时间?

时间:2011-03-17 05:00:27

标签: php

计算注册用户在网站上花费的总时间的最佳方法是什么? ......在这些条件下 1)用户正常注销。 2)用户只需关闭浏览器即可。 3)用户下次回来时可以自动登录。

我认为最好的方法是找到用户在每个页面上花费的时间,并将其添加到总时间,而不是检查整个网站。但我不知道如何实施....请帮助

4 个答案:

答案 0 :(得分:1)

除非他退出,否则您无法找到他离开系统的确切时间。即便如此,他可能会在退出时浏览网站。

执行此操作的大致方法是在会话中设置开始时间,并在每次访问页面时不断增加时间。

因此,当用户第一次在时间T访问您的网站时,您将

  • 创建会话并将开始时间放在那里
  • 将总时间添加为0

对于所有后续请求,您将

  • 检查开始时间并将其与现在的时间进行比较并获得差异
  • 将该时间添加到总时间

此方法将为您提供用户在最后一页上花费的时间。但它会为您提供一些工作。

答案 1 :(得分:1)

您可以使用JavaScript和单独的PHP脚本执行此操作。 javascript代码对意味着用户处于活动状态的事件(例如鼠标/键盘/调整大小事件)做出反应,并调用php脚本。

php脚本将上次收到请求的时间与当前时间进行比较,并检查差异是否超过某个阈值(我建议10-30分钟以防止单击会话加起来)没有任何反应

如果未达到阈值,则将两个时间戳之间的差异添加到数据库中的总和。

之后(在两种情况下)最后一个请求时间都设置为当前时间,脚本结束。

如果您还想知道用户何时关闭您的网站页面,您可以订阅卸载事件和/或实施每X秒调用一次PHP脚本的心跳脚本。

答案 2 :(得分:0)

您有两种方法,要么在数据库中创建一个日志表来跟踪每个用户(通过ID)登录和注销,然后计算特定用户的每条记录中两者之间的时差,然后将所有这些相加。或者你更复杂,并在你的DB-> usertable(logintime'timestamp' - logouttime'timestamp' - lastactive'timestamp' - onlinetime'int')中创建4列,并根据用户的名称更新每个列的代码活动。然后在系统创建新会话之前,在if ( ! $this->sess_read())之后的第105行更改System / libraries目录中的Session.php脚本并编写代码以检查'logouttime'是否与'lastactive'时间不同(为了避免在下一个代码中误解会话超时到期)如果两个字段不相同,请更新您的数据库以使'logouttime'等于'lastactive'然后在第107行恰好在以下之后:$this->sess_update();编写代码以检查是否'logouttime'等于'lastactive'(你将在logout.php脚本中更早地发生这种情况)编写一个代码,通过'logintime'和现在'time()'之间的差异计算在线时间并添加“在线时间”字段的结果。但如果'logoutime'与'lastactive'不同(意味着用户在线并在您的网站中进行活动,因为您正在跟踪他并经常更新'lastactive'字段),那么请编写一个代码来计算在线时间通过'lastactive'和now time'time()'之间的差异,将结果添加到'onlinetime'字段。这样,您就可以在“在线时间”字段中永久记录完全在线时间!我希望你说得对,因为这些例子将是很长的脚本(虽然我不介意按要求分享)。祝你好运。

答案 3 :(得分:-1)

使用会话ID跟踪各个会话。