阻止用户访问管理区域

时间:2012-05-02 17:29:35

标签: mysql php

美好的一天,

am使用我的Admin控制面板PHP页面遇到代码错误。

我想阻止任何其他用户访问此网页,除非他的job_title = admin。

它有效,但即使是管理员,他也会重新定向到登录页面!!

这是代码

<?php
include('db.php');
?>
<?php
// Inialize session
@session_start();
ob_start();
// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['name']) || ($_SESSION['job_title'] != "admin")) {
header('Location: index.php');
}
ob_flush();
?>
>?

<!-- STARTING HTML FORMAT !-->


?>

有任何帮助吗?

2 个答案:

答案 0 :(得分:0)

试试这个,如果还有问题,请告诉我。

$_SESSION['name'] = 'dennis';
$_SESSION['job_title'] = 'admin';
if (!isset($_SESSION['name']) || (!isset($_SESSION['job_title']) ? false: ($_SESSION['job_title'] !== 'admin'))) {
    echo 'Redirecting';
} else {
    echo 'You\'re good! Not redirecting!';
}

这可能是一种更容易理解的方式,只是放入一个函数。

$_SESSION['name'] = 'dennis';
$_SESSION['job_title'] = 'admin';

if (!isset($_SESSION['name']) || !isBoss()) {
    echo 'Redirecting';
} else {
    echo 'You\'re good! Not redirecting!';
}

function isBoss() {
    if (isset($_SESSION['job_title']))
        if ($_SESSION['job_title'] === 'admin')
            return true;
    return false;
}

答案 1 :(得分:0)

我认为您的问题是fubar换行符:)添加了登录页面引用,如果登录失败,则会检查您检查的会话变量。

非常小心放置<?php ?>标记的位置 - 并在.inc文件中,例如db.php include - 您可以省略结束?>标记在最后一行避免意外的ENTER,然后CTRL + S失败,在输出缓冲区(ob)中潜入一个不需要的换行符。如果ob_start被激活,则在您选择或脚本结束之前不会从服务器写入任何内容。 ELSE如果不是,则默认为每个\ n将刷新输出并启动有效负载的内容部分。

的login.php:

<?php
session_start(); // put this on top-most line in your script
$ok = check($_POST['user'], $_POST['pass']);
if($ok) {
 $user = db_get_user_creds($_POST['user']);
 $_SESSION['name'] = $user['name'];
 $_SESSION['job_title'] = $user['job_title'];
} else {
 // session_unset();
 unset($_SESSION['name']);
 unset($_SESSION['job_title']);
}
?>

admin.php的

<?php
session_start(); // put this on top-most line in your script
// or, use ob_start at the very first line
// (with no widespace what so ever written out before it)

include('db.php');
?> I am writing out a newline here, session / header section is going to become unstable
<?php
// Inialize session
// @session_start(); moved up top
ob_start();
// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['name']) || ($_SESSION['job_title'] != "admin")) {
header('Location: index.php');
}
ob_flush();
?>

请参阅“我在这里写新内容”位

深入了解rabbithole;沟通流程是这样的:

1) HEADERS such as
Connection: keep-alive\r\n
Content-Type: text/html\r\n    (etc)
2) DOUBLE NEWLINE (one newline with no previous chars on that line)
\r\n
3) CONTENTS
Body
Of Page