1

我的数据库中有一个用户表,每个用户都有一个 auth_level (1-3)。在我的网站上,我有一个用于添加/删除新用户帐户的管理页面,我想将访问此页面的权限仅限于身份验证级别为 3 的用户。我一直试图让它与会话一起使用,但我被卡住了. 希望有人可以帮助我。

这是我限制访问的代码。不知道我哪里出错了。check.php 开始会话。

<?php
require_once('check.php');

//This function returns True if auth level = '3'
//Otherwise it returns False
function CheckAccess()
{
    $result = (isset($_SESSION['SESS_AUTH_LEVEL']) &&  $_SESSION['SESS_AUTH_LEVEL'] == 3 );

    if(!$result)
    {
        header('WWW-Authenticate: Basic realm=“Test restricted area”');
        header('HTTP/1.0 401 Unauthorized');
        return false;
    }
    else
    {
        header("location: admin.php");
    }
}
?>

如果我以身份验证级别 1 或 3 的用户身份登录,我会得到相同的空白页。

4

4 回答 4

3

我想你从不打电话CheckAccess()。调用它可能会解决您的错误。

于 2013-05-03T10:52:45.937 回答
1

执行您的函数正在执行的以下操作是完全有效的。

if (this=that) { /*do multiple*/ } else //do single;

但是,您似乎没有调用此函数?试试这个:

<?php
  require_once('check.php');
  CheckAccess();
?>
于 2013-05-03T10:53:14.120 回答
0

您缺少}函数的关闭,因此所有 if 语句都被 PHP 视为方法的一部分。

在之前和}之后添加$result =if

应该实现您想要的稍微替代的版本是

<?php

function CheckAccess() {
    $result = (isset($_SESSION['SESS_AUTH_LEVEL']) &&  $_SESSION['SESS_AUTH_LEVEL'] == 3 );
    return $result;
}

if (CheckAccess()) {
    header("location: admin.php");
} else {
    header('WWW-Authenticate: Basic realm=“Test restricted area”');
    header('HTTP/1.0 401 Unauthorized');
}
于 2013-05-03T10:46:58.283 回答
-1

问题是在发送标头之前已经有输出:这需要更改

<?php
require_once('check.php');
?>

<?php

//This function returns True if auth level = '3'


//Otherwise it returns False
function CheckAccess()
{
...

对此

<?php
require_once('check.php');

//This function returns True if auth level = '3'

//Otherwise it returns False
function CheckAccess()
{
...

因为需要先发送标头,然后再发送内容:)

于 2013-05-03T10:50:53.053 回答