【问题标题】:PHP HTTP Referrer - what if it's not passed by the client?PHP HTTP Referrer - 如果它没有被客户端传递怎么办?
【发布时间】:2011-11-15 19:57:16
【问题描述】:

我想记住推荐人,并在用户在我的网站上提交表单后将其送回其原始网站。

我的问题出现是因为 HTTP_REFERRER 并不总是通过...人们会采取哪些典型的解决方案来解决这个问题?除了使用 $_SERVER 来获取这些信息还有其他方法吗?

作为更新...

他们来自的网站不是我的....

【问题讨论】:

    标签: php http-referer


    【解决方案1】:

    老实说,大多数选择不发送此信息的人应该习惯于这种行为,我一直不明白为什么有人会如此关心不发送它所以也许如果有人可以启发我?我假设隐私爱好者或什么的......?

    话虽如此,如果找到引荐来源网址然后自动重定向,或者将他们来自的页面存储在会话中并重定向到该链接,我会做的是(如果他们来自您网站内的页面,那么您可以抓住它)...否则,您可以显示一个包含以下内容的链接:

    <a href="javascript:history.go(-1)">Return</a>
    

    但话说回来,我不知道你的情况的全部细节。

    【讨论】:

      【解决方案2】:

      这取决于您是否控制设置 http_refferer 的服务器。你不能指望那里的信息,所以你必须控制一些用户路径。例如,如果您知道他们将来自的链接,您可以传递一个 get 变量。您必须采取主要的解决方法才能使其正常工作是有原因的。因为你不能相信来自客户的信息。

      【讨论】:

      • 啊,是的,我没有考虑到“其他站点”可能受 OP 控制的情况。在这种情况下,您还可以在重定向到表单之前使用 cookie 来存储信息……但这当然也不可信。
      【解决方案3】:

      您不能依赖设置 HTTP_REFERRER。 (或者准确地说。)简单(也是唯一)的解决方案是设计您的应用程序以优雅地处理这种情况。例如,如果您无法检测到它们来自哪里,请将它们发送到一些通用的感谢页面。

      【讨论】:

        【解决方案4】:

        无法保证客户端会向您发送引荐来源网址(顺便说一下,它是 HTTP_REFERER,而不是 HTTP_REFERRER)。出于隐私原因,一些客户会隐藏它,并且可能会掩盖您可能会发现它的其他方式。因此,在提交表单后,您应该有一个默认登录页面,以防它未包含在请求中。

        【讨论】:

          【解决方案5】:

          你永远不能指望客户端发送HTTP_REFERRER

          您可以将当前 URL 作为GET 参数附加到您的表单操作中。 另一种解决方案可能是基于 cookie/会话的。

          一些框架将此实现为一个称为“flash scope”的功能(用于不同的目的,但您需要这样的东西)。

          【讨论】:

          • 如果你想重定向回一个外国页面,那么 HTTP_REFFERRER 是你唯一的机会。
          猜你喜欢
          • 2023-04-05
          • 1970-01-01
          • 1970-01-01
          • 2013-09-03
          • 2023-03-06
          • 2013-01-05
          • 1970-01-01
          • 1970-01-01
          • 2018-06-07
          相关资源
          最近更新 更多