【问题标题】:How can I track user session throughout my site? [closed]如何跟踪整个网站的用户会话? [关闭]
【发布时间】:2014-01-02 21:25:58
【问题描述】:

我有一个三页的网站。 blog.htmlhome.htmlgames.html

我在每个页面上向我的服务器发出 ajax 请求,以跟踪用户访问过的页面。

我想知道,跟踪用户 sessions 的最佳方式是什么。例如,我的朋友 Steve,通过 home.html 访问我的网站,然后决定访问 games.html,最后决定访问 blog.html,然后关闭他的计算机。

这就像我对综合浏览量进行分组的用户的整个“会话”。实现这一点的最佳做法是什么?

提前谢谢你!

想法:一个想法是使用 javascript 引用的 URL 跟踪会话。这是个好方法吗?

【问题讨论】:

  • 了解PHP sessions
  • 听起来您正在尝试解决已解决的问题。您是否研究过 Google Analytics 等工具?
  • 是的,我听说过它们,但我更愿意使用自己的系统。
  • 那么使用piwik.org(在你自己的服务器上)怎么样?
  • 感谢您的建议,但过去几天我一直在研究这个项目,这对我来说是一次很棒的学习经历。我希望自己实现这一点。

标签: javascript php html session


【解决方案1】:

您可以使用PHP sessions,这是针对此常见问题的开箱即用解决方案。

当您真的想建立自己的教育练习时,它们就是这样工作的:

当用户访问网站时,PHP 脚本会检查是否设置了 cookie。当没有 cookie 时,它​​会自动生成一个随机 ID 并将其写入 cookie。这些 SessionID 和有关用户会话状态的所有信息都保存在服务器端。当你有一个数据库时,你可以将它存储在那里,但你也可以在需要时使用文件。

sessionID 应该是唯一的,以避免重复且无法猜测,这样任何用户都无法伪造他们的 sessionID 来窃取其他用户的身份。所以你的 sessionID 生成算法应该包括当前时间(到毫秒)和一个随机数。

当用户禁用 cookie 时,您仍然可以通过将其 SessionID 作为GET-argument 放入您网站上的每个链接来跟踪他们。例如当用户的SessionID为1f6fe6894d32c5时,urlhref="games.php"变为href="games.php?sid=1f6fe6894d32c5

当您使用 url 方法时,您还应该将 sessionID 绑定到 IP 地址,因为当用户发布指向您网站的链接时,他们可能会忘记从 URL 中删除他们的 sessionID,您的网站会相信所有点击链接的人是同一个用户。但即使您确实检查了 IP,它仍然可能导致同一代理或 NAT 路由器后面的用户之间的无意(或有意)会话窃取。因此,请勿将 URL sessionID 用于任何涉及安全问题的事情。

【讨论】:

  • 将会话 ID 放在这样的链接中可行,但可能是个问题,尤其是在公共/共享计算机上。
  • @RainerPlumer 目前还没有一种技术可以检测用户何时站起来以及其他人何时取代他们的位置。当然,除非您可以访问他们的网络摄像头。
  • 有趣!这些 SESSION cookie 会在用户关闭网页后删除吗?
  • @Highschooler 不,他们没有。但是它们通常有一个超时值,之后浏览器会自动删除它们。您还应该在一段时间后在服务器上自动删除它们以避免耗尽存储空间。
  • 嗯,所以如果用户进入我的网站并点击一些链接,然后决定关闭浏览器,然后返回我的网站并点击链接,它会显示为一个会话?跨度>
【解决方案2】:

好吧,如果您只是想跟踪用户访问过的页面,请将每次访问与日期/时间戳 + ip 以及您需要的任何其他信息一起保存在数据库中。

然后,您可以稍后使用此信息查看用户何时访问任何特定网站。 您还可以通过向链接添加额外参数来跟踪用户来自的链接,即如果您在 page2 上有 2 个指向主页的链接,那么这些链接可能如下所示 href="home.php?ref=link2" 您也可以将此信息存储在数据库中。

有很多方法可以做到这一点,但最后,我建议使用 cmets 中建议的现成软件。

【讨论】:

  • IP 无法识别用户。有时,成千上万的人在同一个代理服务器后面上网。
  • 我不建议它用于 ID,但作为额外的信息可以在以后派上用场......例如用于定位目的。为了识别,需要一个登录系统......在这种情况下,您将存储用户 ID
  • 这就是我现在正在做的事情,但我正试图弄清楚如何将这些页面视图“分组”到会话中。
  • 如上面的回答中提到的,您可以使用 PHP 会话对用户活动进行分组,并使用包含 session_id 的方式存储您的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多