【发布时间】:2010-02-08 23:03:17
【问题描述】:
有没有办法询问请求以确定导航方法?
(使用 LAMP 配置,PHP)
换句话说...我想知道该条目是手动输入到地址栏中的,还是使用了链接/书签。
【问题讨论】:
标签: php navigation hyperlink
有没有办法询问请求以确定导航方法?
(使用 LAMP 配置,PHP)
换句话说...我想知道该条目是手动输入到地址栏中的,还是使用了链接/书签。
【问题讨论】:
标签: php navigation hyperlink
您可以检查 $_SERVER['HTTP_REFERER'] 变量,该变量将包含该人导航的 URL。我不确定如果他们选择书签或手动输入 URL 会发生什么,但我怀疑这个变量会是空白的。
不过,正如 the manual 中所说:
将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。
【讨论】:
可靠,你不能。
您可以尝试的一种方法是引用标题(这是规范中的拼写方式),通常由浏览器发送以指示用户来自哪里。在 PHP 中,这在 $_SERVER['HTTP_REFERER'] 中可用。
大多数现代浏览器(我已经测试过 Google Chrome 和 Firefox)在链接点击时发送引用标头,而在直接进入时不发送 - 也就是说,如果用户的设置要求,他们通常会这样做默认情况下。
根据您真正关心的程度,另一种选择是将某种随机生成的会话变量附加到链接中的 URL,并在收到请求时查看 URL 中的令牌是否与中的令牌匹配用户的会话。如果是这样,那就去吧。如果没有,这个链接是复制粘贴的。
当然,所有这些方法都很容易被打败,你的服务器也可能被骗。不要依赖他们。
【讨论】:
如果他们点击一个链接,浏览器会设置一个引荐来源网址,您可以通过使用来检测引荐来源网址标题的存在
$_SERVER['HTTP_REFERER']
并检查是否已设置。如果它是空白的,则此人要么输入了 URL,要么具有用于清除引荐来源的浏览器扩展程序。它几乎与您在此问题上的解决方案一样接近。
【讨论】:
您所能做的就是查看$SERVER['HTTP_REFERER'] [原文如此]。如果您是直接链接的,那么您很有可能会在那里找到链接到您的页面的 URL。但是有很多情况下你不会得到它,所以你不能依赖它。
在 IE 中,如果您之前使用 saveFavorite 行为在用户为您添加书签之前保存一些数据,则可以检测您何时从书签加载。但它很丑。
【讨论】:
?parameter=something 部分以表明链接来自电子邮件。