我需要找到一种方法,header()重定向的目标可以确定哪个页面启动了重定向。我们使用mod_auth_cas hack来验证登录。由于我们不能将整个站点放在mod_auth_cas后面,因此我们在.htaccess中有一个带有AuthType Cas的子目录。对于登录,我们给出/ cas目录的链接,处理cas,将返回的userid添加到$ _SESSION并与我们的权限数据库进行比较,然后将页面重定向到主页。
这种舞蹈在返回主页时效果很好,但是当$ _SESSION中没有用户ID时,我们希望页面需要登录才能重定向到cas。当用户登录并获得用户ID时,它会重定向回发送它的页面,而不是主页。这种回顾标题重定向的原始页面的能力在网站的其他部分会很方便。
/cas/index.php如何确定哪个页面发起了重定向?如何避免用户打开多个页面的冲突,同时被重定向到一个cas上的cas,转到第二个页面,在那里它们也被重定向到cas,竞争cas返回到第一个,完成它再次被重定向到第二页而不是第一页?而且这个解决方案必须是纯PHP,没有javascript跟踪。
答案 0 :(得分:2)
有几种方法可以做到这一点。
- 在重定向
之前将原始URL存储在会话中- 在登录页面上,从$ _SERVER变量中获取引用URL并在登录后重定向到该
- 调整您的重定向,以便将当前URL添加到登录页面上的get / post变量 - noaccess.php重定向到login.php?ret_url = noaccess.php(你可能想要使用完整的url和url编码)
答案 1 :(得分:0)
根本不修改或添加任何代码,您可以安装XDebug php扩展并打开分析。它会吐出一个cachegrind文件,其中包含有关callstack的信息。您可以在类似kcachegrind的内容中打开它,以获得对header()调用何时发生的直观表示。