2013-01-05 89 views
-1

我正在使用簡單的登錄腳本在網站上工作。情況如下:重定向後不重新加載

在首頁(index.php)上,用戶使用登錄表單登錄,然後在登錄表單中登錄,然後在login.php中對其進行評估。如果數據不正確,用戶將被重定向回主頁,在那裏應該顯示錯誤信息,並保存在$_SESSION['error']。顯示消息後,該變量未設置,以確保它只顯示一次(而不是用戶重新加載頁面時再次顯示)。只是fyi,整個網站被緩衝了ob_*的功能。

現在的問題是,重定向回到首頁(例如,如果密碼錯誤),它不會重新加載頁面,而是顯示舊版本,就像沒有請求或回答在所有。問題必須是服務器端的,因爲直到我手動重新加載(因此代碼還沒有第二次執行之前),錯誤文本也不會顯示。

我還試圖刪除緩衝器之前重定向

ob_end_clean(); 
header("Location: " . HOME); 

或與設置緩存在標頭:

header("Cache-Control: no-store, no-cache, must-revalidate"); 

(這當然是客戶端,但我嘗試了反正) 。

有誰知道如何解決這個問題或爲什麼發生這種情況?

預先感謝

登錄-重定向:login.php

//other code 
if (!PwHash::check_password($db_password, $input['password'])) { 
    $_SESSION['error'] = TRUE; 
    $_SESSION['error_type'] = 'login'; 
    header("Location: " . HOME); //HOME holds the default path 
    exit; 
} else { 
    //other code 

錯誤輸出:index.php

if (isset($_SESSION['error']) AND $_SESSION['error'] == TRUE) { 
    //error output 
    unset($_SESSION['error']); 
} 


編輯: 好的,我應該添加一些更多的細節。是的,錯誤報告是爲所有錯誤和警告設置的,不,我沒有得到任何錯誤和警告。 另外,緩衝區或會話不應該有問題,至少不要使用安裝程序。這兩個文件開始喜歡這個,沒有什麼是頭()語句之前發送到客戶端:

session_start(); 
ob_start(); 
+1

通過「error_reporting(E_ALL); ini_set('display_errors');」打開錯誤報告它可以說類似「標題已發送」 – kirugan

+0

你確定你的會話是否正確啓動? – Nic

+0

爲什麼不使用元重定向...我希望我的建議不是偏題...另外,錯誤報告呢?他們說什麼 ? –

回答

1

首先確保以下幾點:

1-You do session_start(); 
2-No output was sent to buffer before you session_start(); 
3-No output was sent to buffer before header(); 

然後調試代碼加入

ini_set("display_errors","on"); 
error_reporting(E_ALL); 
+0

我同意,把你的錯誤,所以你可以在你的發展努力足智多謀。 – Supplement

+0

我檢查了1和2. 3不應該是一個問題,因爲標題不受緩衝區的阻礙,只有當它被髮送時。並沒有發送。 我也設置了error_reporting,但沒有注意任何事情。 – user1842665