PHP会话验证

PHP会话验证,php,validation,session,Php,Validation,Session,我想写一个只能由管理员访问的脚本 我想这样做: session_start(); if (!isset($_SESSION['user_id'])) { //not logged in //redirect to homepage header("Location: http://domain.com/index.php"); die(); } if ($_SESSION['user_level'] != 1337) { //not admin //re

我想写一个只能由管理员访问的脚本

我想这样做:

session_start();

if (!isset($_SESSION['user_id'])) { //not logged in

    //redirect to homepage
    header("Location: http://domain.com/index.php");
    die();

}

if ($_SESSION['user_level'] != 1337) { //not admin

    //redirect to homepage
    header("Location: http://domain.com/index.php");
    die();

}

if ($_SERVER['REQUEST_METHOD'] == 'POST') { //form is submitted

    //validate the submitted data
    //submit the query

}

//form goes here
我的问题是:有没有更好的方法来验证这一点(例如,所有三个条件都应该嵌套)或者这就足够了

干杯


n1te

下面是一个更整洁的地方。。。尽管您可能希望在$\u会话['user\u id']上运行一些验证,以确保它是int或您期望的任何数据类型

session_start();

if (!isset($_SESSION['user_id']) || $_SESSION['user_level'] != 1337) { //not logged in

    //redirect to homepage
    header("Location: http://domain.com/index.php");
    exit(); // NOT DIE :P

}


if ($_SERVER['REQUEST_METHOD'] == 'POST') { //form is submitted

    //validate the submitted data
    //submit the query

}

//form goes here
我会写:

if (!isset($_SESSION['user_id']) || $_SESSION['user_level'] != 1337) {
    //not logged in/not admin
    //redirect to homepage
    header("Location: http://domain.com/index.php");
    die();
}

如果不可能动态更改个人权限(即:您删除管理员权限),那么这就足够了,尽管我会构建一个函数:

function IsAdmin() {
    if( !isset($_SESSION['user_level'])){
        return false;
    }

    return ($_SESSION['user_level'] == 1337);
}

对于这种情况,您将在将来使用扩展权限检查。

您可以使用IF-ELSEIF-ELSEIF-IF-ELSEIF更适合这种情况。这并不重要,因为您是
die()
ing,但是有没有更好的方法来验证这一点呢?让它们像前面指出的那样
函数
。在验证$会话['user\u id']是否存在后,使用'is\u numeric'可能会验证它,否则您将得到一个未识别的索引错误