Php 如何计算用户在网页上的时间?

Php 如何计算用户在网页上的时间?,php,javascript,Php,Javascript,我正在为我的网站制作一些统计代码(我是php开发人员)。我想计算网络用户在任何页面上停留的秒/分钟数(就像谷歌分析一样),但我不知道如何做到这一点。感谢您的帮助或脚本 在页面加载时创建一个日期对象,然后在页面卸载时创建另一个并减去它们。之后,您可以向跟踪服务器发送AJAX请求,并发送经过的时间 var startTime = new Date(); var endTime; window.onunload = function() { endTime = new Date(); var e

我正在为我的网站制作一些统计代码(我是php开发人员)。我想计算网络用户在任何页面上停留的秒/分钟数(就像谷歌分析一样),但我不知道如何做到这一点。感谢您的帮助或脚本

在页面加载时创建一个日期对象,然后在页面卸载时创建另一个并减去它们。之后,您可以向跟踪服务器发送AJAX请求,并发送经过的时间

var startTime = new Date();
var endTime;

window.onunload = function()
{
 endTime = new Date();
 var elapsedSeconds = endTime.getTime() - startTime.getTime();
 //Do the ajax request, sending elapsedSeconds
}

当用户离开页面时,可以在javascript中触发卸载事件,该事件向服务器发送Ajax请求。由于这可能不适用于所有浏览器,特别是在网络延迟很高的情况下,因此也有一个ping脚本(也使用Ajax),只要用户停留在页面上,它就会偶尔调用统计系统(例如,根据您想要的分辨率,每10-60秒调用一次).

如果您想在服务器端(即php)中执行此操作,则可能需要为此分配一个表。说“分析”

首先,您需要在每个页面中添加此脚本。将这些数据插入到分析表中,分析表为$_SERVER['http\u referer'],当前时间戳,远程地址和当前页面URL

现在是计算部分。 基本上,当用户第一次登录到您的页面时,$\u服务器['http\u referer']不会来自您的域。然后保留时间戳作为开始时间

现在检查下一个时间戳。如果http_referer与以前的记录页面URL相同,则查找时间戳的差异,以了解用户在页面中停留的时间

或多或少,我想说的是找出用户每次请求之间的时间间隔


这种方法的缺点是:当用户进入一个页面时,它会关闭。在你的网站上找不到时间。

你是如何收集数据的?常见的选项是使用javascript检测页面、查看Web服务器日志文件、在服务器端请求处理程序中或嗅探TCP/IP流量

“像谷歌分析”那样做意味着前者。在这种情况下,这样做的方法是在页面加载时尽快获取时间戳(而不是等待page ready/onload事件),并将该值与之前的tiestamp进行比较(因此您可能会将其存储在cookie中)。然后,您需要某种方法将其发送回服务器端,以及记录和报告数据的方法

请注意,尝试在用户离开页面时触发ajax调用(例如通过)将无法可靠地工作(启动请求的页面处于其生命周期的末尾)。这里重要的是异步部分。而打一个同步电话只会减慢网站的速度


您可能想看看——尽管它不支持开箱即用的驻留时间测量,但它很容易扩展。对于后端,您可能会做得比我想出的一种快速简便的方法更糟糕

在我想要在页面上跟踪时间的站点的每个页面上,我都包含一个跟踪脚本

我获取尽可能多的信息,并创建一个数据库条目,包括推荐人、请求/加载的页面、用户代理、ip、时间戳等

这些时间戳与用户的ip一起,可用于确定用户在上一页上的时间(包括当前页的加载时间)

唯一的缺点是我无法确定他们访问的最后一页的时间(这并不总是一件坏事,我可以减少跟踪空闲时间)


反弹通过指定时间段内给定ip的单个条目来识别(一小时可能足够)。

通常最好在服务器端进行计算,这样用户就不会篡改它们。没错,但你必须问问自己,你到底想跟踪什么。window.load和window.unload之间的时间,或者服务器收到第一个响应和第二个响应之间的时间。可能会有明显的区别。确保Ajax请求可靠地完成而不影响页面转换将是非常困难的。