代码之家  ›  专栏  ›  技术社区  ›  Cory Dee

什么导致重定向循环?

  •  3
  • Cory Dee  · 技术社区  · 15 年前

    以下是我的网页:

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

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

    当您访问重定向页面时,它会看到您没有有效的会话并重定向到登录页面。你可以登录没有问题,但在认证后,我收到“这个网页有一个重定向循环”页在Chrome。

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

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

    干杯

    5 回复  |  直到 15 年前
        1
  •  5
  •   Jeff Davis    15 年前

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

    您可能应该将他们试图访问的页面存储在$_会话或$_COOKIE变量中,而不是依赖$_服务器['HTTP_REFERER']。最有可能的会话会更好,这取决于您的设置。

        2
  •  2
  •   thelem    15 年前

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

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

        3
  •  1
  •   netcoder    15 年前

    我的猜测是:

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

    怎么解决?在登录页面和其他资源中检查会话有效性(不仅用于存在)。

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

        4
  •  1
  •   K4emic    15 年前

    您应该始终检查$_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
  •  0
  •   Martin Schapendonk    15 年前

    你可以让你的登录页面一次完成重定向(不需要重定向回“重定向页面”)。

    推荐文章