我正在使用簡單的登錄腳本在網站上工作。情況如下:重定向後不重新加載
在首頁(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();
通過「error_reporting(E_ALL); ini_set('display_errors');」打開錯誤報告它可以說類似「標題已發送」 – kirugan
你確定你的會話是否正確啓動? – Nic
爲什麼不使用元重定向...我希望我的建議不是偏題...另外,錯誤報告呢?他們說什麼 ? –