【问题标题】:Address bar input vs. Link地址栏输入与链接
【发布时间】:2010-02-08 23:03:17
【问题描述】:

有没有办法询问请求以确定导航方法?

(使用 LAMP 配置,PHP)

换句话说...我想知道该条目是手动输入到地址栏中的,还是使用了链接/书签。

【问题讨论】:

    标签: php navigation hyperlink


    【解决方案1】:

    您可以检查 $_SERVER['HTTP_REFERER'] 变量,该变量将包含该人导航的 URL。我不确定如果他们选择书签或手动输入 URL 会发生什么,但我怀疑这个变量会是空白的。

    不过,正如 the manual 中所说:

    将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。

    【讨论】:

      【解决方案2】:

      可靠,你不能。

      您可以尝试的一种方法是引用标题(这是规范中的拼写方式),通常由浏览器发送以指示用户来自哪里。在 PHP 中,这在 $_SERVER['HTTP_REFERER'] 中可用。

      大多数现代浏览器(我已经测试过 Google Chrome 和 Firefox)在链接点击时发送引用标头,而在直接进入时发送 - 也就是说,如果用户的设置要求,他们通常会这样做默认情况下。

      根据您真正关心的程度,另一种选择是将某种随机生成的会话变量附加到链接中的 URL,并在收到请求时查看 URL 中的令牌是否与中的令牌匹配用户的会话。如果是这样,那就去吧。如果没有,这个链接是复制粘贴的。

      当然,所有这些方法都很容易被打败,你的服务器也可能被骗。不要依赖他们。

      【讨论】:

      • 正确。很棒的信息。它实际上是用于演示和验证目的。
      • 如果你真的想进行身份验证,然后在某种程度上保护它,你需要在 URL 中附加一些秘密的、每个用户的密钥。这是唯一 100% 可靠的方法。
      • +1,唯一可以确定的方法是使用某种不断变化的密钥(可能存储在会话中)来验证链接是否被点击。每次查看页面时都应重新生成密钥,但只要简单的时间哈希 + 用户 IP 就足够了。
      • 对于任何给定的请求,欺骗引用者都非常容易;不要依赖它进行任何类型的身份验证。 en.wikipedia.org/wiki/Referrer_spoofing
      • 前几天,我用它在某人的 Wordpress“人们如何访问我的博客”结果中添加了无意义的搜索查询。很有趣:)
      【解决方案3】:

      如果他们点击一个链接,浏览器会设置一个引荐来源网址,您可以通过使用来检测引荐来源网址标题的存在

      $_SERVER['HTTP_REFERER'] 
      

      并检查是否已设置。如果它是空白的,则此人要么输入了 URL,要么具有用于清除引荐来源的浏览器扩展程序。它几乎与您在此问题上的解决方案一样接近。

      【讨论】:

        【解决方案4】:

        您所能做的就是查看$SERVER['HTTP_REFERER'] [原文如此]。如果您是直接链接的,那么您很有可能会在那里找到链接到您的页面的 URL。但是有很多情况下你不会得到它,所以你不能依赖它。

        在 IE 中,如果您之前使用 saveFavorite 行为在用户为您添加书签之前保存一些数据,则可以检测您何时从书签加载。但它很丑。

        【讨论】:

        • 这对所有电子邮件客户端中的电子邮件链接都有效吗?或者至少是 Thunderbird、Outlook、Eudora?
        • 可能不会,因为邮件客户端并没有确切的 URL 可以放入引用者中。
        • 没有。但是当您发送邮件时,通常会在 URL 中包含 ?parameter=something 部分以表明链接来自电子邮件。
        猜你喜欢
        • 2015-01-15
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-06
        相关资源
        最近更新 更多