2014-10-30 62 views
2

我試圖添加我運行的小內部網站上的某些頁面的角色。只顯示頁面,如果會話isset和變量==

我在用戶登錄到網站登錄表單時分配以下會話;

// Register $username, $role Sessions and redirect 
$_SESSION['username']= $username; 
$_SESSION['accessLevel'] = $role; 
$_SESSION['is_logged_in'] = true; 

然後,我在我的logout.php頁面上有以下內容;

<?php 
session_start(); 
session_destroy(); 
header("Location: ../login.php"); 
?> 

我想根據用戶的$ _SESSION [ 'ACCESSLEVEL']

例如只顯示頁面限制頁面,如果$ _SESSION [ 'ACCESSLEVEL'] == '管理員' 別的重定向到登錄頁面(或錯誤頁面)

這是我在管理頁面上的;

<?php 
session_start(); 
if (!isset($_SESSION['username']) && $_SESSION['accessLevel'] == 'admin'){ 
?> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 
<body> 
<p>ADMIN AREA!! </p> 
<p>username: <?php echo $_SESSION['username'];?></p> 
<p>Access: <?php echo $_SESSION['accessLevel'];?></p> 
</body> 
</html> 
<?php 
} 
else { 
    header("location:../login.php"); 
} 
?> 

現在的頁面重定向當我登錄使用管理員憑據如果刪除了檢查我的print_r會議是正確的login.php;

$ _SESSION [ 'ACCESSLEVEL'] =管理

$ _SESSION [ '用戶名'] = testuser的

我在哪裏去了?

回答

6

您希望username存在,現在你正在檢查,看看它是不是isset()。更新您的條件來:

if(isset($_SESSION['username']) && $_SESSION['accessLevel'] == 'admin') { 
    // HTML here 
} else { 
    header("location:../login.php"); 
} 

此外,一個側面說明:如果你有一個邊緣情況是你設置一個username值,但一個accessLevel值,你會得到一個致命的錯誤與此條件。你應該確保該accessLevel被設置爲安全:

isset($_SESSION['username'], $_SESSION['accessLevel']) && $_SESSION['accessLevel'] == 'admin' 
+2

「你會得到一個致命的錯誤與此條件」:也許是,也許不是,這取決於你的服務器是如何設置的,但檢查都設置是最好的方式去。 – developerwjk 2014-10-30 22:19:42

+0

公平點@developerwjk :) – Sam 2014-10-30 22:29:50

+0

偉大的東西,現在它的作品。我不可能有1個價值,而不是其他的,所以現在我將與此合作。謝謝 – 2014-10-30 22:47:21