首页 > 解决方案 > php会话重定向到登录

问题描述

php 新手,仍在学习如何散列和验证密码。但在我到达那里之前,我需要帮助我的代码出了什么问题。我可以注册,它将值保存到我的数据库中。但是当进入我的 home.php 或任何其他使用的页面时

<?php 
  session_start(); 

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

使用包含代码的 login/register.php 文件

$password = md5($password_1);
    $query = "SELECT * FROM loginsystem WHERE username='$username' AND password='$password'";
  $results = mysqli_query($db, $query);

    if (mysqli_num_rows($results) == 1) {
      $_SESSION['username'] = $username;
      $_SESSION['success'] = "You are now logged in";
      header('location: home.php');
    }else {
        array_push($errors, "Wrong username/password combination");

但是一切都重定向到 login.php 并重置值,就好像我希望它破坏会话一样。验证会话时我做错了什么吗?

标签: php

解决方案


基本上,我刚刚使用OR运算符将您的两个if条件合二为一。尝试使用这个。

<?php 
  session_start(); 

  if ((!isset($_SESSION['username'])) || isset($_GET['logout'] )) {
    session_destroy();
    unset($_SESSION['username']);
    header("location: login.php");
  }
?>

推荐阅读