Php HTTP\u引用程序在被身份验证组件重定向时为空

Php HTTP\u引用程序在被身份验证组件重定向时为空,php,cakephp,Php,Cakephp,在CakePHP中,当您尝试访问保护操作时,您会自动进入应用程序中的登录表单。但是HTTP_引用器是空的 $referer = env('HTTP_REFERER'); echo $referer; 因此,通常当我访问登录页面时,我会看到显示此代码的上一个页面URL,但是如果我在Auth组件访问登录页面后,它将是空的 为什么是空的?就像刚才提到的那样 我如何让它将重定向确认为引用注意:在这种情况下,使用Auth.Redirect会话值不是一个选项,因为它将在用户离开站点后保留,因此,例如,如

在CakePHP中,当您尝试访问保护操作时,您会自动进入应用程序中的登录表单。但是HTTP_引用器是空的

$referer = env('HTTP_REFERER');

echo $referer;
因此,通常当我访问登录页面时,我会看到显示此代码的上一个页面URL,但是如果我在Auth组件访问登录页面后,它将是空的

为什么是空的?就像刚才提到的那样

我如何让它将重定向确认为引用注意:在这种情况下,使用Auth.Redirect会话值不是一个选项,因为它将在用户离开站点后保留,因此,例如,如果他们返回登录页面,它将显示原始请求的操作,而不是引用的页面!因此,即使不是因为它正在使用现有会话,它也将充当推荐人

编辑:

另一个例子是:

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

当用户被带到登录表单时,它会说他们没有推荐人,但这显然不是真的

是否
$\u服务器['HTTP\u REFERER']
也为空


如果它是空的,它不是由服务器设置的,这意味着通常没有referer,您做了一个简单的刷新或通过书签调用此页面。请参见此处的referer的一些用例:

您是否尝试过referer控制器

$refere=

控制器::referer();//引用url

HTTP\u REFERER
是浏览器告知服务器用户之前访问的页面的一种方式。它并不表示用户刚刚从哪个页面重定向

以Stackoverflow上的广告为例。单击其中一个会将您带到位于
adzerk.net
的某个长URL,该URL记录您的单击,然后将您重定向到目标URL。中间Adzerk页面本身不是一个有趣的页面,用户永远不会真正看到它,除非他密切关注地址栏。事实上,那里甚至没有一个“页面”。所以它不算“页面访问”。下一个页面将收到
stackoverflow.com
作为引用者,中间重定向页面不相关

Stackoverflow -> Adzerk redirect -> Some advertiser
                                    HTTP_REFERER: stackoverflow.com
如果您在地址栏中键入地址,也没有任何引用。如果您在Stackoverflow上,在地址栏中键入
yahoo.com
,yahoo将看不到您的任何推荐人。如果你点击从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);
    }

}

是的,它是空的。你知道为什么吗?当用户从另一个页面发送到该页面时,它应该包含一些内容!好吧,就这么说吧。如果没有设置referer,我怎么知道用户已被重定向?我不能只检查Auth.Redirect会话是否存在,因为如果用户直接访问登录页面,也可能存在该会话。。。。那么,我该如何区别呢?ThanksHTTP很棘手,不是吗答案是,你不可能轻易地含蓄地做这些事情。如果您需要跟踪这些信息,请将它们显式地嵌入URL中,比如一个
?redirect=true
参数或其他什么。您可以重写
AppController::redirect
,以插入该参数。总的来说,您可能希望采用一种更无状态的设计,而不是与HTTP的工作方式作斗争,并接受某些事情是不能/不应该做的。看到你最近的问题,至少我会想到这一点我很想使用查询字符串而不是会话来处理这些东西,但出于某种原因,CakePHP一直在爆炸并抱怨重定向循环:/更不用说,如果Auth.redirect没有被归类为referer:P,那么我将遇到与如何传递重定向查询相同的问题。真的是相同的问题。你能展示一个例子吗将参数注入到url@Cameron正如我一直在暗示你的那样,我认为你做得太过分了,不太适合网络应用。但随你的便P