我正在修改一个基于成员的网站,其所有者希望能够跟踪数据库后端中所有用户在网站上花费的时间(登录/注销)。登录很容易;有一个入口点(登录表单),因此,一旦登录就可以在数据库中抛出。
但是,注销有点棘手,因为除非用户单击“注销”以明确让我们知道他们要离开解决方案,否则会变得更麻烦(以及用户真正单击注销的频率如何?)。一种可能性(仅就跟踪网站上的总时间而言)是在数据库中注册每个页面加载并将其与加载它的用户相关联;问题在于该站点是一个基于会员的视频交付站点(不是您想的那样!),他们的最后一次浏览量可能是 20 或 30 分钟的视频。我们还需要捕获在最后一页上花费的时间——而不仅仅是加载它的时间。
我想到了两种可能的解决方案,但都不是那么优雅。第一个是通过 javascript 捕获所有“卸载”事件并注册对“logout.php”的调用(假设 XMLHttpRequest 或任何在页面卸载后不会立即消失的东西);问题在于内部链接也注册为卸载事件,因此单击任何链接都会将用户注销(您可以检查“卸载”处理程序中的标志,并让所有内部链接设置该标志 - 不难做到动态的,但有点笨拙)。另一种方法是设置一个间隔,每 60 秒左右对数据库执行一次 ping 操作,这让我们知道用户仍在网站上,然后在提取用户历史记录时进行一些数学运算以计算出该会话的总长度; 这似乎也有点骇人听闻。还,
似乎这个问题并没有那么不寻常,而且必须有更好的方法;是否有解决此问题的最佳实践方法?如果没有,您是否看到任何改进这些解决方案的方法?