我正在对基于成员的站点进行修改,其所有者希望能够跟踪数据库后端中所有用户在站点(登录/注销)上花费的时间。登录很简单;有一个入口点(登录表单),因此登录可以在数据库发生时立即引发。如何跟踪基于Web的登录和注销?
然而,注销有点棘手,因为除非用户点击“注销”来明确告诉我们他们正在离开解决方案会变得更加麻烦(以及用户点击注销的真正次数是多少?)。一种可能性(就跟踪站点上的总时间而言)将是在数据库中注册每个页面载入并将其与装载它的用户相关联;问题在于该网站是一个基于会员制的视频传送网站(不是你在想什么!),他们的最后浏览量可能会是一个二十或三十分钟的视频。我们需要捕捉在最后一页上花费的时间,而不仅仅是加载时间。
我想到了两种可能的解决方案,这两种解决方案都不那么优雅。第一个是通过javascript来捕获所有的“卸载”事件,并将一个调用注册到“logout.php”(假设XMLHttpRequest或任何不会在页面卸载后立即死掉);问题在于内部链接也会注册为卸载事件,因此单击任何链接都会将用户注销(您可以在“卸载”处理程序中检查一个标志,并让所有内部链接设置该标志 - 不难做到动态,但有点kludgy)。另一种方法是每隔60秒左右设置一次ping数据库的时间间隔,这让我们知道用户仍然在网站上,然后在抽取用户历史记录来计算出该会话的总长度时进行一些数学计算;这似乎也有点ha。。而且,这些解决方案都不适用于禁用JS的用户。
看来这个问题并不是那么不寻常,而且还有更好的方法;有没有解决这个问题的最佳实践方法?如果没有,您是否看到了改进这些解决方案的方法?