【问题标题】:How to prevent users to access admin page with user session_destroy如何防止用户使用用户 session_destroy 访问管理页面
【发布时间】:2020-09-01 21:35:33
【问题描述】:

我想阻止已登录的用户在登录时使用他们的会话访问管理页面。 他们应该只能使用用户名“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");
   }

【问题讨论】:

  • 我所看到的只是标题之前不应该有任何输出,而鉴于发布的内容,您正在这样做。然后你在'admin
  • 我修复了丢失的报价,认为这只是一个粘贴/文案错误。
  • 您应该在您的 SO 帖子中包含一个问题。我们不知道您的问题出在哪里,您只描述了您想要实现的目标,而不是您的代码实际执行的操作或失败的位置。

标签: php authentication session


【解决方案1】:
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');
}

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

【讨论】:

    【解决方案2】:
    if (isset($_COOKIE[session_name()])) {
                setcookie(session_name(), '', time() - 86400, '/');
    }
    session_destroy();
    header("location: login.php");
    exit();
    

    session_destroy() 还不够。你也应该让 cookie 过期。

    并且总是在header('location=...');之后使用exit();

    【讨论】:

    • 在发送位置标头后使用 exit() 仅在您首先编写错误代码时才有用。只需在发送位置标头后(在同一执行分支中)不要编写任何代码
    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多