【问题标题】:What Causes A Redirect Loop?是什么导致了重定向循环?
【发布时间】:2011-05-14 16:29:11
【问题描述】:

这是我的页面:

重定向页面: 如果用户有一个打开的会话,重定向到正确的资源 否则重定向到登录页面

登录页面: 如果用户登录信息有效,则重定向到 $_SERVER['HTTP_REFERER'] 否则显示登录页面

当您访问重定向页面时,它会发现您没有有效会话并重定向到登录页面。然后您可以登录没有问题,但身份验证后我收到“此网页有重定向循环”。 Chrome 中的页面。

这不是一个真正的循环,因为有几种方法可以退出(IE 提供有效的登录详细信息并转到目标资源,提供无效的登录并接收错误消息等)。但是我可以看到浏览器的混乱(从 a 到 b 再到 a)。

有什么办法可以解决这个问题吗?

干杯

【问题讨论】:

  • 问题可能出在 $_SERVER['HTTP_REFERER'] 上,您可能想在这里使用实际路径.. ??如果我的推荐人是您的重定向脚本并且我有一个有效会话怎么办,它会看到会话有效并将我重定向到以前的重定向脚本.. 我希望您的应用程序架构正确

标签: php web-applications redirect infinite-loop


【解决方案1】:

$_SERVER['HTTP_REFERER'] 将始终是登录页面,因为您必须在成功登录之前加载登录页面。因此,一旦您成功登录,referer 就是登录页面,因此登录页面会将您重定向到登录页面,您仍然成功登录,因此它会一遍又一遍地登录。

与其依赖 $_SERVER['HTTP_REFERER'],不如将他们试图访问的页面存储在 $_SESSION 或 $_COOKIE 变量中。很可能会话会更好,具体取决于您的设置。

【讨论】:

    【解决方案2】:

    提交您的登录详细信息后,$_SERVER['HTTP_REFERER'] 将成为您登录页面的 URL,因为用户看到的最后一页是他们登录的表单。

    在重定向到登录页面之前,请考虑在 PHP 会话中存储“重定向到”url。您也可以在重定向到登录页面时将其作为参数传递,但我可以看到这种方法存在潜在的安全漏洞(例如将用户重定向到另一个站点、添加虚假 HTTP 标头等)

    【讨论】:

      【解决方案3】:

      我的猜测是:

      如果用户有一个会话,但不是一个有效的会话(例如:会话哈希不匹配),它会被重定向到登录页面(因为他有一个会话)。但是当他到达那里时,您检查他是否有会话,并且他确实有(但它无效),因此您将他重定向到索引资源。在那里,您检查会话是否有效,但不是。因此,您将他重定向到登录页面。等等……

      如何解决?检查登录页面和其他资源中的会话有效性(不仅是存在)。

      当然,如果 HTTP_REFERER 是登录,忽略它并转发到索引资源。

      【讨论】:

        【解决方案4】:

        您应始终检查 $_SERVER['HTTP_REFERER'] 变量是否包含有效数据,因为它不可信,因为用户代理提供了此值。

        来自the php.net manual

        The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. 
        

        【讨论】:

        • 这是一个很好的观点。如果用户没有他们想要访问的当前页面,您还需要一个默认位置。
        【解决方案5】:

        您可以让您的登录页面一次性完成重定向(无需重定向回“重定向页面”)。

        【讨论】:

          猜你喜欢
          • 2019-07-26
          • 2014-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-27
          • 2021-09-19
          相关资源
          最近更新 更多