我正在修改其所有者希望能够跟踪在DB后端为所有用户在网站上花费(登录/注销)时一个基于会员制的网站。登录是容易的;有条目(登录表单)的一个点,并且作为结果,登录可在数据库中,当他们发生异常。

注销,然而,是有点棘手,因为除非用户点击“注销”明确地让我们知道他们离开其溶液沾到多毛(和多久的用户的真正的点击注销? )。一种可能(只是在跟踪网站上的总时间计算)将在数据库中注册的每个页面加载,并将其与加载它的用户关联;但问题是,该网站是一个会员制的视频分发网站(你在想什么不!)和他们最后的浏览量很可能将是一个二三十分钟的视频。我们需要捕获时间花在该最后一页上,以及 - 不只是它被加载时

我已经想到了两个可能的解决方案,这两者都不是所有优雅。首先将通过JavaScript来捕获所有“卸载”事件,并注册为“logout.php”(这个假设的XMLHttpRequest或任何不只要页面被卸载死亡)的呼叫;这个问题存在着内部联系也注册为卸载的事件,所以点击任何链接将注销用户(您可以在“卸载”处理程序,以检查标志,并已全部内部链接设置标志 - 并不难做到动态,但有点缺憾)。另一种方法将涉及设定的时间间隔来ping DB每隔60秒左右,这让我们知道,用户仍然在网站上,然后做拉动用户的历史要弄清楚该届会议的总长度时,一些数学;也似乎有点hackish的。而且,这些方法都工作与JS用户禁用。

看来,这个问题是不是不正常了,我们有了一个更好的办法;是有一个最佳实践的方法来解决这个?如果没有,你看不到任何的方式来提高这两种解决方案?

有帮助吗?

解决方案

该网站未建,允许注销事件的精确跟踪。你只是不能保证从浏览器中得到通知,当用户退出,所以一般情况下你可以希望的是套住会话超时事件最好的,该事件可能不火,直到20分钟,弃用户页面后

现在,你可以通过把一个Ajax请求的计时器在每一页上(也许一次或两次每分钟)提高对这个有点提供一个“心跳”,但这有一些注意事项,以及:您需要确保会议还最终会超时,你还是不能保证用户不会阻止这些请求,或许通过禁用JavaScript的。

其他提示

我已经使用定时器JavaScript来ping服务器良好的成功。在我的情况下,网站需要JavaScript所以这不是一个问题。我也使用此机制来执行检查,其防止一个帐户从所以有更令人信服的理由这样做黑客正从两个不同的机器登录。

有一两件事要记住使用卸载是你还没有保证的广告,该卸载事件总是会被解雇。您将有人们对笔记本电脑谁例如只需关闭笔记本电脑,所以计时器方法将probally更准确一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top