2010-06-27 23 views
2

在我的網站管理方面我已經使用非常簡單的邏輯:與在session_start問題(),ob_start()和安全

session_start(); ob_start(); 
if(!isset($_SESSION['user'])){ 
    header("Location: login.php"); 
} 
contents... 
ob_end_flush(); 

是的,這是工作完美,重定向到登錄頁面。但漫畫的一點是,我可以看到index.php的內容(保護!!!)here 什麼是錯的?

回答

5

把一個ob_end_cleanexitheader調用之後,以防止任何進一步的執行/輸出:

if (!isset($_SESSION['user'])) { 
    header("Location: login.php"); 
    ob_end_clean(); 
    exit; 
} 
8

阿布拉kadabra

if(!isset($_SESSION['user'])){ 
    header("Location: login.php"); 
    die("GET LOST YO"); 
} 
+1

更好沒有消息,但殺死腳本容易解決問題。 – animuson 2010-06-27 21:28:01

+2

*聳肩*,瀏覽器不應該看到這一點,因爲你正在重定向。如果有人偷偷摸摸......那麼,你只是告訴他迷路了,因爲他總是應該有:P – Robus 2010-06-27 21:29:53

+0

儘管在這種情況下並不重要,但在任何地方使用die()都不是一個好主意在一個網站。 – 2010-06-27 23:04:51

1

你應該在如果所有腳本內容。

session_start(); 
ob_start(); 
if(isset($_SESSION['user'])){ 
    contents... 
} 
else { 
    header("Location: login.php"); 
ob_end_flush();