Php 如何防止用户通过用户会话访问管理页面

Php 如何防止用户通过用户会话访问管理页面,php,authentication,session,Php,Authentication,Session,我想防止登录的用户在登录时通过会话访问管理页面。 他们应该只能使用用户名“admin”登录 session_start(); if (!isset($_SESSION['username'])) { $_SESSION['msg'] = "You must log in first"; header('location: login.php'); } if (isset($_SESSION['username']) != 'admin') {

我想防止登录的用户在登录时通过会话访问管理页面。 他们应该只能使用用户名“admin”登录

   session_start(); 

   if (!isset($_SESSION['username'])) {
      $_SESSION['msg'] = "You must log in first";
      header('location: login.php');
   }

   if (isset($_SESSION['username']) != 'admin') {
      session_destroy();
      unset($_SESSION['username']);
      header("location: login.php");
   }

   if (isset($_GET['logout'])) {
      session_destroy();
      unset($_SESSION['username']);
      header("location: login.php");
   }
session\u destroy()
还不够。你也应该让饼干过期

并始终使用
exit()
标题之后('location=…')


isset
函数将返回一个布尔值,不能根据字符串进行检查。

我所能看到的是,在标题之前不应该有任何输出,而您正是这样做的,考虑到发布的内容。然后,您的
'管理
<中缺少一个引号。那只是一种不好的浆糊吗?如果没有,那么问题就来了。启用错误报告。我修复了丢失的报价,认为它只是一个粘贴/文案eror。但是,你应该在你的SO帖子中包含一个问题。我们不知道您的问题在哪里,您只描述了您想要实现的目标,而没有描述代码的实际功能或失败的地方。只有当您首先编写了错误代码时,在发送位置头后使用exit()才有用。只需在发送位置头后(在同一执行分支中)不编写任何代码
if (isset($_COOKIE[session_name()])) {
            setcookie(session_name(), '', time() - 86400, '/');
}
session_destroy();
header("location: login.php");
exit();
if (isset($_SESSION['username'])) {
   if($_SESSION['username'] !== 'admin'){
     session_destroy();
     unset($_SESSION['username']);
     header("location: login.php");
   }

} else {
   $_SESSION['msg'] = "You must log in first";
   header('location: login.php');
}