2

我需要找到一种方法,让 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 跟踪。

4

2 回答 2

2

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

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

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

- 调整您的重定向,以便将当前 URL 添加到登录页面上的 get/post 变量中 -- noaccess.php 被重定向到 login.php?ret_url=noaccess.php(您可能希望使用完整的 url 和 url 编码它)

于 2011-03-23T18:24:34.793 回答
0

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

于 2011-03-23T18:37:02.373 回答