2014-02-27 92 views
3

任何人都可以幫助我嗎?PHP - 會話多用戶和管理員權限

我仍然在使用大多數的PHP的東西在這裏新手。我有點用會話創建多用戶時遇到問題。

我想要做的是這個。僅限管理員和僅限普通用戶的帳戶的帳戶。

只有當登錄的普通用戶能夠訪問專門面向用戶的頁面時,管理員權限才能夠訪問管理員頁面。

到目前爲止,我創建了一個用戶登錄憑證。哪些只適用於管理員。我真的很困惑如何添加非管理員才能訪問它們的頁面。

任何人都可以幫我用這段代碼嗎?

這是主頁

<?php 

//Initialize Session 
session_start(); 

error_reporting(E_ALL^E_NOTICE); 

//$name = $_SESSION['username']; 
if(isset($_SESSION['username'])) 
    { 
     header('Location: index_admin.php'); 
    } 
?> 

這是管理頁面

<?php 
// Inialize session 
session_start(); 

// Check, if username session is NOT set then this page will jump to login page 
if (!isset($_SESSION['username'])) 
    { 
     header('Location: index.php'); 
    } 
?> 

這是登錄表單

<form action="login.php" method="post"> 

          <input type="text" name="uname"  placeholder="USERNAME . . . " autofocus/> 
          <br/> 
          <input type="password" name="pword"  placeholder="PASSWORD . . . " /> 
          <br/> 
          <center><input type="submit" name="submit"  value="LOGIN" /><button type="reset" value="Reset" />RESET</button></center> 

</form> 

這是login.php中

<?php 
session_start(); 

include("config.php"); 

$login = mysql_query("SELECT * FROM users WHERE (username = '" .  mysql_real_escape_string($_POST['uname']) . "') and (password = '" .  mysql_real_escape_string($_POST['pword']) . "')"); 
// Check username and password match 
if (mysql_num_rows($login) == 1) 
    { 
     // Set username session variable 
     $_SESSION['username'] = $_POST['uname']; 

     // Jump to secured page 
     header('Location: index_admin.php'); 
    } 
else 
    { 

     // Jump to login page 

     header('Location: index.php'); 

    } 
    ?> 

這是數據庫,提前爲assitance

user_tbl 


id = 1 


username = admin 


password = 12345 

感謝。

+0

請!停止使用mysql_ apis,尤其是安全應用程序。如果你在公共網絡上使用它們,你的網站*將會被運用。 –

回答

0

理想情況下,您需要擴展提供此代碼的數據結構:設置用戶和組表;這些團體將暗示訪問權。當您提交登錄頁面,檢查數據庫的用戶名,然後: -

1)如果不匹配,返回「拒絕訪問」屏幕

2)如果匹配,外部參照同組表以確定特權此用戶的級別。然後: - 2a)如果管理員,返回管理員屏幕,設置適當的會話變量來存儲該決定。 2b)否則,返回到正常的用戶屏幕,同時設置適當的會話變量。

您的核心問題是,進入「該」主頁時,您只是檢查用戶名是否設置,然後將用戶帶到管理屏幕。這是錯誤的。嘗試將你的邏輯分解成更簡單的步驟,並從人的角度考慮「if-else」邏輯。 「我想要發生什麼?」那麼「我需要知道什麼才能確定如何做到這一點?」。

祝你好運!

1
  • 您需要在數據庫中爲用戶類型(admin/normal_user)添加一個新字段。
  • 在您的登錄腳本中,將用戶類型保存在會話(admin/normal_user)中。
  • 現在,在頁面的每一頁檢查用戶類型的會話值,如果它是admin讓頁面打開,並且它是normal_user重定向頁面登錄。
1

從您的問題看來,您將爲管理用戶和非管理用戶使用相同的登錄頁面。這是我會提供答案的情況。

在驗證特定用戶的名稱和密碼的過程中,您需要確定該用戶已被授予的權限級別。你的用戶表中可能有一個名爲「特權」的列。

usr_tbl需要看起來像這樣:

id username  password privilege 
    1  admin  W$^%^$%^%^% admin 
    2  reggel  DJDT&646364 user 
    3  ollie  DTHDHFGEERT user 

登錄時,you'l閱讀usr_table拉用戶的價值出列,並將其存儲爲一個會話變量是這樣的:

$_SESSION['privilege'] = $privilege; /* from user table */ 

然後你可以做這樣的邏輯來決定你的用戶應該看到什麼,以及她應該能夠做什麼。

if ('admin' == $_SESSION['privilege']) { 
    // Jump to secured page 
    header('Location: index_admin.php'); 
} 
else { 

    // Jump to login page 
    header('Location: index.php'); 
} 

在以後的網頁瀏覽,如果你的會話邏輯功能正常,則$_SESSION['privilege']變量應繼續使用。

p.s. mysql_用於安全代碼的API?真?