美好的一天,
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 !-->
?>
有任何帮助吗?
答案 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