我有这个代码来验证用户是否有管理员帐户到我的网站的后台,但如果用户没有它,请不要将用户重定向到..index.php
。他留在此页面但未显示任何内容。
验证码
<?php
$Usuario = isset($_SESSION["Usuario"]) ? $_SESSION["Usuario"]: '';
$Rank = isset($_SESSION['Rank']) ? $_SESSION['Rank'] : '';
if ($Usuario != '' && $Rank == 'Administrador'){
}
else
{
echo "<script>alert(\"Area Restrita\");</scrpit>";
header("Location: ../index.php");
}
?>
在此页面中,(标题)我调用此文件来验证会话。
<?php
session_start();
require_once "../config.php";
require "verificar.php";
?>
<div id="header">
<a href="index_logged.php?page=index"><img src="img/logo.png"></a>
</div>
答案 0 :(得分:0)
您的索引文件:
<?php
session_start();
require_once "../config.php";
require "verificar.php";
?>
<div id="header">
<a href="index_logged.php?page=index"><img src="img/logo.png"></a>
</div>
您的验证文件:
<?php
$Usuario = isset($_SESSION["Usuario"]) ? $_SESSION["Usuario"]: '';
$Rank = isset($_SESSION['Rank']) ? $_SESSION['Rank'] : '';
if ($Usuario != '' && $Rank == 'Administrador'){
// do some action for administrator
}
else
{
header("Location: ../index.php");
exit();
//echo "<script>alert(\"Area Restrita\");</scrpit>"; <-- you don't need this here
}
?>
注意,我评论了回声。你不能在header
之前输出任何东西。如果您输出某些内容(并且您在示例中执行了此操作),则会出现headers already sent
错误。
你的主要错误是你首先输出了一些东西然后尝试重定向。
无论如何,我认为更好地使用另一种方法。
表单和表单处理程序:
<?
$username = $_POST['username'];
$password = $_POST['password'];
// here is some query which will check if this user with this password exists and get the role of the user
// if exists $userExists = true; else $userExists = false;
if($userExists) {
$_SESSION['userLoggedIn'] = true;
if($role == 'administrator') {
$_SESSION['isAdministrator'] = true;
}
else
{
$_SESSION['isAdministrator'] = false;
}
header('Location: index.php');
exit(); // <-- don't forget this
}
else
{
// handler for bad user/password
}
?>
<form action='' method='post'>
<input type='text' name='username' />
<input type='password' name='password' />
</form>
现在,受限制的页面将从此代码开始:
<?
$isAdministrator = $_SESSION['isAdministrator'];
if(!$isAdministrator) {
ban_ban_ban();
die('bye bye');
}
// content for administrator
?>
注意:这只是示例,不要忘记在任何地方添加一些支票!!!!! 11
但是,如你所愿:)希望,这对你有帮助。
答案 1 :(得分:0)
header("Location: ../index.php");
不会阻止其他代码运行 - 如果您只想重定向他,则应在发送{{1}后立即die();
或exit;
标题
Location
标题之前的alert
部分也是不必要的,因为浏览器会在用户能够看到警报之前重定向用户。并且在向输出发送内容后禁止调用Location
函数(例如,就像使用header
时那样)
您应该考虑的另一件事 - 是通过查看echo
中的值来验证用户而产生的安全问题 - 这意味着 - 如果有人被记录 - 您将无法将其记录下来会话到期
更好的方法是在$_SESSION
中保留一些令牌并将用户的状态保存在数据库中 - 这样,您可以直接从数据库更改其状态,而无需依赖会话/更改代码< / p>