验证用户时重定向页面

时间:2014-04-21 13:39:11

标签: php html session verify

我有这个代码来验证用户是否有管理员帐户到我的网站的后台,但如果用户没有它,请不要将用户重定向到..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>

2 个答案:

答案 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>