2011-03-22 95 views
2

情況是我在這個網站有不同的訪問級別,我有簡單的登錄過程爲所有有效的用戶工作,但我現在試圖分隔不同的用戶訪問不同的頁面。PHP登錄認證問題(初學者)

這是我在我的頁面的起始碼:

// CHECKS IF THE USER HAS LOGGED IN 
session_start(); 

if(!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']){ 
    header("location:index.php"); 
} 

if(!$_SESSION['mystatus']=='1'){ 
    header("location:access_error.php"); 
} 

所以基本上我想這個頁面,如果他們登錄用的1訪問級別的用戶只能訪問但沒有正確的訪問級別相應地指導他們

目前,它允許以不同訪問級別(例如3)登錄的用戶仍然可以查看此頁面。

請幫忙。

千恩萬謝,

+0

請注意,您可能希望使用'低於'和'高於'運算符或按位比較。這允許更細粒度的訪問控制。 – Lekensteyn 2011-03-22 14:37:36

+0

,但通過使用「大於」肯定是不錯的,如果我希望具有較高訪問級別的所有用戶訪問該頁面?我的情況是訪問級別爲2的用戶應該無權訪問此頁面。 – buymypies 2011-03-22 14:47:34

+0

在這種情況下,您可能需要查看按位運算符。總之,每一位都是一個權限,可以設置爲0(不可訪問)或1(訪問權限)。下一篇文章:[維基百科文章](http://en.wikipedia.org/wiki/Bitwise_operation)。關於[PHP中的按位操作]的問題(http://stackoverflow.com/q/2131758/427545)。 – Lekensteyn 2011-03-22 14:54:19

回答

1
if($_SESSION['mystatus']!='1'){ 
    header("location:access_error.php"); 
} 
3

!$_SESSION['mystatus'] == 1將被解釋爲(!$_SESSION['mystatus']) == 1。由於$_SESSION['mystatus']包含非假值(如1和3),因此它的計算結果爲true!true轉爲false,因此false == 1不匹配。

使用不等於操作符(!=):

$_SESSION['mystatus'] != 1 
+0

謝謝你們。非常新的這個:D – buymypies 2011-03-22 14:39:11

+0

@ buymypies:如果這回答你的問題,點擊這個答案左側的'v'標記爲接受。 – Lekensteyn 2011-03-22 14:55:02

2
if(!$_SESSION['mystatus']=='1'){ 

構造這樣是非常危險的,特別是如果你是新來的PHP和還沒有想出它的運算符優先級規則。

這被解釋爲「採取mystatus會話變量中的任何內容的邏輯NOT,並與字符串'1'進行比較。」

你想要的是

if ($_SESSION['mystatus'] !== '1') { 

「如果mystatus變量是一個字符串,不等於‘1’的字符串,然後評估爲真。

+0

+1,人們總是混淆'=','=='和'==='及其目的。 – Jakub 2011-03-22 14:37:50

+0

我看到沒有使用字符串'1'而不是數字1的eason – 2011-03-22 14:38:43

+0

@Col:Me或者,但這就是OP如何擁有它。 – 2011-03-22 14:40:05

0

後續工作給我。套裝在自己的網頁訪問,並在你的數據庫的權限,當用戶嘗試登錄您檢索許可,並與網頁相比較的水平。

$permission = $_SESSION['PERMISSION'] 
$access=2; // level of access 
if ($permission>$access){ 
    $_SESSION["pagina"]="yourPage.php"; 
    header("Location: accessPermission.php"); 
} 

我希望作品您。