簡體   English   中英

阻止用戶訪問 admin.php

[英]Prevent User from accessing admin.php

我在阻止普通用戶訪問我的 admin.php 頁面時遇到了問題。 我在數據庫中設置了它,以便用戶有一個類型(它是一個布爾值,所以 0 = admin 或 1 = 普通用戶)在我的 admin.php 頁面的頂部我有

 <?php
// Initialize the session
session_start();

// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
}
    elseif(!isset($_SESSION['type']) && $_SESSION['type'] !== 0) {
        header('Location: profile.php');
    exit;

    }
?>

我最初的最后一段代碼為:

elseif(!isset($_SESSION['type']) || $_SESSION['type'] !== 0) {
        header('Location: profile.php');
    exit;

但這會阻止所有用戶(管理員或普通用戶)訪問管理頁面。 我不知道如何繼續。

編輯:我是 PHP 的新手,仍然是學生,所以我不是 100% 熟悉 PHP。

正確的代碼是:

// Check if the user is logged in
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] == true){ // if login
    if(!isset($_SESSION['type']) && $_SESSION['type'] == 0){ //if admin (type == 0)
         header('Location: profile.php');
    }
    else{ //if not admin (type !== 0)

        header('send somewhere else');
    }
}
else { // else not login
    header('Location: login.php');
    exit;
}

由於您是 PHP 新手,我要推薦的不是修復代碼的答案(我沒有看到任何明顯的問題),而是如何設置開發環境以便您可以很容易看出自己的問題所在。

有兩個主要選項:

1.)(最佳選擇)設置 Xdebug 和 IDE,以便您可以逐行實時調試代碼

2.) 使用echo向頁面輸出信息

選項1

這是最好的選擇,我強烈建議您盡快學習如何逐行調試 PHP。 Xdebug 是最流行的 PHP 調試器; 你需要設置並安裝它。 然后你需要一個支持調試的 IDE。 如果你有資金,我推薦 PHPStorm,如果你需要免費選項,我推薦 Sublime Text。

選項#2

不要讓您的代碼重定向,而是讓它輸出信息,如下所示:

$loggedIn = isset($_SESSION["loggedin"]);
echo $loggedIn;

$type = $_SESSION['type'];
echo $type;

這是一種“窮人”調試。 它允許您查看打印到頁面上的變量值是什么。 一旦您知道這些值是什么,您就可以輕松地找出代碼不工作的原因。 你甚至可以做這樣的事情:

elseif(!isset($_SESSION['type']) && $_SESSION['type'] !== 0) {
    echo "this will take you to profile.php";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM