2011-08-29 59 views
2

在CakePHP中,當您嘗試訪問保護操作時,會自動將其帶到應用程序中的登錄表單。但HTTP_REFERER是空的?HTTP_REFERER在通過身份驗證組件重定向時爲空

$referer = env('HTTP_REFERER'); 

echo $referer; 

所以通常當我訪問登錄頁面,我會看到顯示此代碼的前一頁網址,但如果我訪問登錄頁面通過驗證組件上當受騙後,有那麼這將是空的?

爲什麼它是空的?正如我剛纔提到的那樣?

我該如何得到它承認重定向作爲一個referal? 注意:在這種情況下使用Auth.Redirect會話值不是一個選項,因爲它在人員離開站點後會保留,所以例如,如果他們返回到登錄頁面,它將顯示原始請求的操作,而不是推薦頁面!因此,將作爲推薦行爲,即使它不是因爲它使用現有會話

編輯:

作爲替代例如:

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

當用戶進入到登錄的形式,它會說他們不是引用者,但顯然不是真的! ????

回答

2

HTTP_REFERER是瀏覽器的方式告訴什麼頁面,用戶在訪問之前的服務器。它不表示用戶剛被重定向到的頁面。

以此處的Stackoverflow上的廣告爲例。點擊其中一個將帶你到一個很長的URL在adzerk.net,記錄您的點擊,然後重定向到目標網址。中間的Adzerk頁面本身並不是一個有趣的頁面,用戶從未真正看到它,除非他密切關注地址欄。事實上,那裏甚至沒有「頁面」。所以它不算作「頁面訪問」。下一頁將收到stackoverflow.com作爲引用者,中間重定向頁面是不相關的。

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

如果你在地址欄中輸入地址,那麼根本就沒有引用者。如果你在Stackoverflow和類型yahoo.com進入地址欄,雅虎將不會看到你的任何referer。如果你點擊在一個鏈接,帶你從Stackoverflow雅虎,瀏覽器確實發送引薦。

就您的情況而言,如果您通過在地址欄中輸入受保護的操作並直接獲取重定向來訪問受保護的操作,則根本沒有您來自的上一頁。


按照該意見,在這裏如何注入數據到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); 
    } 

} 
+0

好吧,所有人都說。如果沒有引用者被設置,我怎麼知道用戶已被重定向?我不能僅僅檢查Auth.Redirect會話的存在,因爲如果用戶直接訪問登錄頁面,也可能存在這個會話....那麼,我該如何區分?謝謝 – Cameron

+0

HTTP很棘手,不是嗎。 :)答案是,你不可能很容易地隱含地做這些事情。如果你需要跟蹤這些信息,明確地將它們嵌入URL中,就像'?redirect = true'參數或其他東西。你可以重寫'AppController :: redirect'來注入該參數。總體而言,您可能希望擁抱更無狀態的設計,而不是與HTTP的工作方式作鬥爭,並接受某些事情不能/不應該完成。至少這是你最近看到的問題所想到的。 :) – deceze

+0

我很樂意使用查詢字符串而不是會話來處理這些事情,但由於某種原因,CakePHP只是吹響了並且一直抱怨着重定向循環:/更不用說我最終只會遇到同樣的問題如果Auth.redirect沒有被歸類爲引用者,我該如何傳遞重定向的查詢:P相同的問題。 – Cameron

0

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

如果它是空的,它不是由服務器設置的,這意味着通常沒有引用者,你做了一個簡單的刷新或者通過書籤調用這個頁面。在這裏查看一些引用的用例:http://www.electrictoolbox.com/php-http-referer-variable/

+0

是的,它是空的。任何想法,爲什麼?當用戶通過從另一個發送到達該頁面時,它應該包含一些東西! – Cameron

0

您是否嘗試過refer控制器?

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

+0

不行,我恐怕:/ – Cameron

相關問題