我试图在我正在运行的小型内部网站上添加某些页面的角色。
当用户登录网站登录表单时,我会分配以下会话;
// 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
我哪里错了?
答案 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'