如果会话isset和变量==,则仅显示页面

时间:2014-10-30 22:07:46

标签: php session

我试图在我正在运行的小型内部网站上添加某些页面的角色。

当用户登录网站登录表单时,我会分配以下会话;

// Register $username, $role Sessions and redirect
$_SESSION['username']= $username; 
$_SESSION['accessLevel'] = $role;
$_SESSION['is_logged_in'] = true;

然后我在logout.php页面上有以下内容;

<?php 
session_start();
session_destroy();
header("Location: ../login.php");
?>

我想根据用户限制页面$ _SESSION [&#39; accessLevel&#39;]

例如,仅当$ _SESSION [&#39; accessLevel&#39;] ==&#39; admin&#39;否则重定向到登录页面(或错误页面)

这是我在管理页面上的内容;

<?php
session_start();
if (!isset($_SESSION['username']) && $_SESSION['accessLevel'] == 'admin'){ 
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
 <p>ADMIN AREA!! </p>
 <p>username: <?php echo $_SESSION['username'];?></p>
 <p>Access: <?php echo $_SESSION['accessLevel'];?></p>
</body>
</html>
<?php
}
else {
    header("location:../login.php");
}
?>

现在,当我使用管理员凭据登录时页面会重定向到login.php如果我删除了check ir会话是否正确;

$ _ SESSION [&#39; accessLevel&#39;] = admin

$ _ SESSION [&#39;用户名&#39;] = testuser

我哪里错了?

1 个答案:

答案 0 :(得分:6)

您希望username 存在,现在您正在检查它是否不是 isset()。将条件更新为:

if(isset($_SESSION['username']) && $_SESSION['accessLevel'] == 'admin') { 
    // HTML here
} else {
    header("location:../login.php");
}

另外,旁注:如果您有边缘情况,您设置了username值但一个accessLevel值,您将收到致命错误有条件的。您应该确保accessLevel设置为安全:

isset($_SESSION['username'], $_SESSION['accessLevel']) && $_SESSION['accessLevel'] == 'admin'