2010-10-22 113 views
0

我有一個帶有會話控制的php登錄頁面。它將普通用戶路由到info.php,管理員用戶路由到info_admin.php。如果我使用「普通」用戶登錄,它會轉到info.php,但是,在地址欄中,我可以訪問info_admin.php,它不會將我踢出去,並允許我訪問。我該如何控制或防止用戶手動執行此操作?防止用戶訪問管理頁面

有關信息,我使用這個腳本:http://php-login-script.com/

非常感謝!

回答

4

只是爲了讓Lotus Notes的代碼有點更緊湊:

<?php 
if (!isset($_SESSION['user_level']) || ($_SESSION['user_level'] != 2)) { 
    header('Location: login.php'); 
    exit; 
} 
?> 

<!-- Your page HTML here --> 
+0

我使用這段代碼,但沒有顯示頁面。我如果(!isset($ _ SESSION ['user_level'] || $ _SESSION ['user_level']!= admin) – BigMike 2010-10-22 21:42:34

+0

對不起,代碼中有錯誤,我已經修復了它 – 2010-10-22 21:44:58

+0

Mike,我剛做了一個回聲$ _SESSION ['user_level'];它沒有顯示,但我知道它的工作原理,因爲protect_page()函數正在使用Session控制,所以這個coule會失敗的原因是什麼? – BigMike 2010-10-22 21:53:58

2

我迅速通過登錄碼掃描,這似乎是設置變量$_SESSION['user_level']時英寸

要允許有2級唯一用戶,例如用戶首次登錄,把這個在你的頁面的頂部。它應該將任何不是二級用戶的人重定向回登錄頁面。

<?php 

if (isset($_SESSION['user_level'] && $_SESSION['user_level'] == 2) { 

?> 


<!-- Your page HTML here --> 


<?php 

} else { 
    header('Location: login.php'); 
} 

?> 
+0

蓮花,我有在每一頁的頂部,但它只檢查該用戶登錄它不檢查用戶。級別 – BigMike 2010-10-22 17:15:18

+0

好的,已編輯。希望這應該工作。 – 2010-10-22 17:26:10

+0

這很酷,但爲什麼如果在文件頂部驗證失敗時只更改標題,爲什麼要將所有HTML代碼放在if ... else之間呢?這將使閱讀代碼更容易。 – Liam 2010-10-22 22:06:45

1

高層次的方法是,在登錄時,存儲在會話或數據庫中的用戶的訪問級別。在每次頁面調用時,檢查該值。

1

只需添加一個額外的函數來檢查用戶級別 - 如果它處於或高於所需級別,則返回true。如果不是,則返回false和故障轉移。然後在您想要保護的頁面中,使用所需的保護級別觸發功能。

例如:

function checkPerms($level) { 
    if ($level >= number) { 
    return true 
    } else { 
    failover here 
    } 
} 

然後在你的頁面調用

checkperms(5); 

編輯:如果你真的很漂亮的,你可以只添加一個額外的參數去原來的函數調用與用戶級別,默認爲最低值。然後,如果用戶驗證爲已註冊,則可以同時檢查用戶級別。