【问题标题】:Redirect referrer header重定向引用标头
【发布时间】:2011-04-06 09:19:06
【问题描述】:

我在 PHP 中有一个登录脚本,我将客户端重定向到该脚本。当客户端登录时,我想将用户返回到 302 将他重定向到登录页面的页面。

我想保持 url 尽可能干净(最好只有 /login),我不想使用 cookie,比如会话 cookie。

我试图依赖$_SERVER['HTTP_REFERRER'],但我有一个问题,当我单击需要登录的链接时,$_SERVER['HTTP_REFERRER'] 设置为单击链接的页面,而不是目标页面发送 302 重定向。 (FF4)

如果$_SERVER['HTTP_REFERRER'] 未设置(https、书签或其他),那么我会将 GET url 与返回 url (/login/return/myurl) 混淆。对于所有其他情况(浏览器在重定向到 /login 的请求上提供 HTTP_REFERRER),我真的想完全依赖 $_SERVER['HTTP_HEADER'] 来生成一个干净的 url。

有什么方法可以礼貌地要求浏览器使用重定向标头发送“正确”的引荐来源网址,还是我坚持堵塞所有重定向的 url?

【问题讨论】:

  • 不要依赖HTTP_REFERER

标签: php http http-headers


【解决方案1】:

不,没有办法向浏览器询问与推荐人相关的任何内容。

如果我是你,我不会将任何人重定向到任何地方,而是在适当的位置显示登录表单(在模板驱动的网站上非常容易),将当前位置存储在隐藏字段中。

【讨论】:

  • 登录框不会污染搜索引擎结果吗?
  • @Jon 搜索引擎?如果我错了,请纠正我:在您当前的情况下,搜索引擎被重定向到登录页面并面对相同的登录框,而您 [显然] 没有发现任何问题。同一个登录框但没有重定向有什么问题?
  • 在我看来,您将有 10 个页面具有完全相同的内容 - 索引中有 10 次点击,而不是 10 个页面指向一页 - 例如索引中的一页?还是我错了?
  • @Jon 在我看来,如果它是私人区域,那么任何搜索引擎都不应该被允许甚至请求这个页面。如果它是带有登录选项的公共区域,我认为没有理由从该页面重定向任何人。
【解决方案2】:

您无法指定在 Referer 标头中发送的 URL。你有三个选择。

  • 将 URL 存储在会话中。
  • 将 URL 存储在 cookie 中。
  • 将 URL 存储在请求参数中。

请求参数是最合适的,因为用户可能打开了多个窗口(共享会话和 cookie),您可以轻松区分它们。

【讨论】:

  • 没有其他更适合的重定向代码,以便客户端发送实际引荐来源网址的 HTTP_REFERRER?
  • 我知道没有规范会强制执行这种行为。还要注意拼写错误:存储引荐来源网址的标头称为Referer,并使用$_SERVER['HTTP_REFERER'] 访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 2011-09-22
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
相关资源
最近更新 更多