我正在寻找一种方法来计时访问者在网站上的停留时间,同时在更改页面时不重新启动或中断计时器。
将初始访问时间存储在会话值中。未来对网站的任何访问都会使用辅助会话变量来保存上次访问的时间,并据此计算出网站上的时间。
除非您使用Ajax更新会话值,否则用户可能会在您的网站上(在同一页面上)活动20分钟,但它将显示为零长度访问。
基本示例:
<?php
session_start();
if(isset($_SESSION['firstVisit']))
$_SESSION['latestVisit'] = date();
else
$_SESSION['firstVisit'] = date();
echo $_SESSION['firstVisit'] . " - " . $_SESSION['latestVisit'];
?>
您可以在用户请求第一个页面时启动会话。通过该会话,您可以逐页跟踪用户。因此,您可以计算他们访问的第一页和最后一页请求之间的总时间。
您还应该能够在页面卸载时发送Ajax请求,从而可以检测在单个页面上花费的时间。然而,如果他们在多个窗口/选项卡中浏览,除非你能够检测到页面焦点,否则你的阅读是错误的。
把两者结合起来,你应该能够得到一个相当完整的画面。
将数据存储在会话中,并在用户执行注销时保存数据
(如果用户没有注销,它将不会被保存,但这应该不是问题)
编辑:如果用户没有登录/注销,则必须捕捉会话何时终止并保存数据。在评估数据时,你必须补偿会话在结束前的生存时间,例如5分钟或其他时间,然后减去它。这会给你一个大致的数字,而不是用户查看网站的确切时间。
您可以跟踪用户登录的时间,但如果您想要(未登录的)用户停留的时间,我认为这是不可能的,因为有很多方法可以从一个页面移动到另一个