在應用程序的每個頁面上,我檢查用戶是否登錄。我最近意識到我的腳本結構不好,並做了一些更改。我想知道如果這種新方法實現了操作的對於未登錄用戶以正確的順序。PHP用戶登錄失敗處理
<?php
ob_start();
session_start();
if ($_SESSION['loggedin'] !== true) {
$_SESSION['messages'][] = '<li>User Not Logged In</li>';
session_write_close();
ob_end_clean();
header('Location: login.php');
exit;
}
else {
// execute page
}
?>
在此之前劇本,ob_start()
呼叫低於登錄檢查部分,因此是導致重定向給出問題那session_start()
產生它自己的標題。
我也很想知道該腳本是否爲登錄檢查提供足夠的安全性。
除非腳本在重定向前向瀏覽器輸出內容,否則不應在頂部需要'ob_start();'。您是否將這個腳本包含在頁面中,並且在調用此腳本之前,包含腳本是否將輸出發送到瀏覽器? – jeroen
@jeroen'session_start()'默認輸出到瀏覽器,所以AFAIK我需要'ob_start()'來確保執行'header()'調用。除了會議這個腳本在一開始。 [會話輸出和重定向的說明](http://stackoverflow.com/questions/8028957/headers-already-sent-by-php/8028987#8028987) – foochow
不,如果頭已經發送,則無法啓動會話。這並不意味着'session_start'正在發送標題。 – jeroen