离开后保存用户会话浏览历史记录(特定超时)



我正在寻找一种方法,在离开我的网站后,轻松保存访问过我网站的用户的浏览历史记录。在保存时,我想将用户会话期间访问过的页面链接在一起。这样我就可以得到不同页面之间的相关性。

我希望在会话结束时保存数据的原因是性能。我不想每次页面加载都在表中写入(可能有大量索引(。在会话结束时保存(或离开网站后(还有一个优点,即搜索引擎蜘蛛可以很容易地过滤掉

旁注:我的网站使用的是PHP 5.3中的Yii框架。

我为我的问题想出了几个解决方案:

  1. 当用户离开站点时,在onbeforeunload中发出ajax请求。

    我通过在具有链接到内部页面的href属性的<a>上的每个onclick事件中设置一个变量来检查用户是否留在站点上。遗憾的是,javascript方法并非万无一失,因为浏览器的后退和前进按钮(不设置此变量(。还有一个额外的好处,即会话数据通常在"最后(ajax(请求"期间可用。

  2. 编写我自己的会话处理程序

    这将是更麻烦的解决方案。我还没有在Yii中使用自定义会话处理程序,我有点不确定(例如(是否可以在覆盖的gcSession((函数中删除过期的会话数据之前轻松加载和处理它。此外,当一个新用户进入网站时,这种方法可能会被触发,这给他留下了额外的加载时间来同时处理多个会话历史记录(我喜欢防止(

  3. 使用计划任务/cron yob

    这两者都有好处,但也有使用大量CPU资源的风险。我还怀疑这将需要大量的额外处理。对于这个解决方案,我仍然希望使用Yii框架和(如果可能的话(相同的应用程序上下文来执行cron-yob。

如果有任何信息可以帮助我在上述解决方案之间做出选择,我将不胜感激。也许我忽略了一个解决方案或可能性?我真的很想在PHP中的设置超时时触发一个事件,而不是像sleep()那样让用户等待。总而言之,我相信PHP中的异步执行(从单个同步请求启动(是我想要的。有什么建议吗?

  1. 绝对不是。您将遇到浏览器兼容性问题。某些浏览操作(如关闭选项卡与关闭应用程序、后退/前进按钮(不会引发火灾。不,只是不。更不用说安全问题了。。。。永远不要信任客户端

  2. 总的来说,我真的不认为这是明智的。你会经历混乱,只是为了让你的会议有条理,尤其是在连接会议时。深入探究yii的内在可能很有趣,但就我个人而言,我觉得这并不合适。

  3. 最终,这是我眼中唯一的解决方案。我看不出你认为这会是一个很大的cpu负载。您可以使用YII命令行(Docs(通过YII运行此操作,该命令行应该能够承载您的web内容。

    只需设置一个cron作业来定期处理活动会话,并将它们写入DB。

这只是我的2c

我只会在会话中存储用户访问的每个页面,而不是所有这些东西。

当会话到期时(如何捕获此事件?我不知道,我想这可能是可行的(,您将访问的页面存储在DB中。您还可以将它们写入一个临时文件,如果您担心服务器负载过大,那么cron作业会在夜间对其进行处理。

我赞同阿恩对HTML/ajax内容的反应,这太疯狂和不可靠了。我认为你可以在服务器端做得更好。

最新更新