【问题标题】:How do I determine where a header redirect came from如何确定标头重定向的来源
【发布时间】:2011-07-21 13:00:51
【问题描述】:

我需要找到一种方法,让 header() 重定向的目标可以确定哪个页面启动了重定向。我们正在使用 mod_auth_cas hack 来验证登录。由于我们不能在 mod_auth_cas 后面拥有整个站点,因此我们在 .htaccess 中有一个带有 AuthType Cas 的子目录。对于登录,我们提供一个到 /cas 目录的链接,处理 cas,将返回的用户 ID 添加到 $_SESSION 并与我们的权限数据库进行比较,然后页面被重定向到主页。

这种舞蹈在刚返回主页时效果很好,但是当 $_SESSION 中没有用户 ID 时,我们希望需要登录的页面重定向到 cas。当用户登录并且我们取回用户 ID 时,它会重定向回发送它的页面,而不是主页。这种回顾标头重定向的原始页面的能力在网站的其他部分会很方便。

/cas/index.php 如何确定重定向源自哪个页面?如何避免用户打开多个页面的冲突,同时在一个页面上被重定向到 cas,转到第二个页面,他们也被重定向到 cas,完成 cas 回到第一个页面,完成它再次重定向到第二页而不是第一页?而且这个解决方案必须是纯 PHP,没有 javascript 跟踪。

【问题讨论】:

  • 为什么不在会话中存储原始 url?

标签: php session redirect header breadcrumbs


【解决方案1】:

无需修改或添加任何代码,您就可以安装 XDebug php 扩展并打开分析。它将吐出一个包含有关调用堆栈信息的缓存研磨文件。您可以在 kcachegrind 之类的文件中打开它,以直观地了解对 header() 的调用何时发生。

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。

    -在重定向之前将原始 URL 存储在会话中

    -在登录页面上,从 $_SERVER 变量中获取引用 url 并在登录后重定向到该 URL

    -调整您的重定向,以便将当前 URL 添加到登录页面上的 get/post 变量中 -- noaccess.php 被重定向到 login.php?ret_url=noaccess.php (你可能想要使用完整的 url 并对其进行 url 编码)

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2019-10-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多