我的数据库中有一个用户表,每个用户都有一个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的用户身份登录,则会显示相同的空白页。
答案 0 :(得分:3)
我想你永远不会打电话给CheckAccess()
。调用它可能会修复你的错误。
答案 1 :(得分:1)
执行以下操作完全有效,您的功能正在执行。
if (this=that) { /*do multiple*/ } else //do single;
但是,您似乎没有调用此功能?试试这个:
<?php
require_once('check.php');
CheckAccess();
?>
答案 2 :(得分: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');
}
答案 3 :(得分:-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()
{
...
因为标题需要先发送,然后才能发送内容:)