当Auth Component重定向时,HTTP_REFERER为空

时间:2011-08-29 22:32:41

标签: php cakephp

在CakePHP中,当您尝试访问保护操作时,您将自动转到应用程序中的登录表单。但是HTTP_REFERER是空的????

$referer = env('HTTP_REFERER');

echo $referer;

通常,当我访问登录页面时,我会看到显示此代码的上一页网址,但是如果我在被Auth组件带到那里后访问登录页面,那么它将是空的......

为什么它是空的?因为我刚才被提到了???

如何让它确认重定向是一个推荐? 注意:在这种情况下,使用Auth.Redirect会话值不是一个选项,因为它会在此人离开网站后保持不变,例如,如果他们返回登录页面,它将显示ORIGINAL请求的操作,不是推荐的页面!因此,即使它不是因为它使用现有的会话

,它也会作为推荐

编辑:

作为另一个例子:

    if(isset($_SERVER['HTTP_REFERER'])) {
        echo $_SERVER['HTTP_REFERER'];
    }
    else
    {
        echo 'their was no referer';
    }

当用户被带到登录表单时,它会说他们不是引用者,但显然不是真的! ????

3 个答案:

答案 0 :(得分:2)

HTTP_REFERER是浏览器告诉服务器之前用户正在访问的页面的一种方式。它不表示用户刚从哪个页面重定向。

例如,在此处使用Stackoverflow上的广告。点击其中一个会转到adzerk.net处的长网址,该网址会记录您的点击次数,然后将您重定向到目标网址。中间Adzerk页面本身并不是一个有趣的页面,用户实际上从未看到它,除非他密切关注地址栏。事实上,那里甚至没有“页面”。所以它不算是“页面访问”。下一页将作为引用者收到stackoverflow.com,中间重定向页面无关紧要。

Stackoverflow -> Adzerk redirect -> Some advertiser
                                    HTTP_REFERER: stackoverflow.com

如果在地址栏中输入地址,则根本没有引用者。如果你在Stackoverflow和输入 yahoo.com到地址栏,雅虎将不会看到你的任何引用者。如果您在从Stackoverflow转到Yahoo的链接上单击,浏览器会发送一个引用。

在您的情况下,如果您通过在地址栏中输入受保护的操作来直接访问受保护的操作并重定向,则根本就没有您来自的页面。


根据评论,这里是如何在重定向时将数据注入URL:

AppController extends Controller {

    function redirect($url, $status = null, $exit = true) {
        if (is_array($url)) {
            $url['?'] = 'redirect=true';
        } else {
            $url.= '?redirect=true';
        }
        return parent::redirect($url, $status, $exit);
    }

}

答案 1 :(得分:0)

$_SERVER['HTTP_REFERER']也是空的吗?

如果它是空的,它不是由服务器设置的,这意味着通常没有引用,你做了一个简单的刷新或通过书签调用此页面。在这里查看referer的一些用例:http://www.electrictoolbox.com/php-http-referer-variable/

答案 2 :(得分:0)

您是否尝试过推荐控制器?

$refer = Controller::referer(); // referral url