簡體   English   中英

使用header()重定向后會話變量丟失

[英]Session Variables are lost after redirecting using header()

我有index.php文件,它從用戶那里獲取用戶名和密碼,然后重定向到process_login.php,將這些憑據與SQL數據庫進行比較以授權用戶。 現在,如果用戶已獲得授權,我想獲取有關此用戶的所有數據,並希望在其他PHP文件中使用。 我正在使用會話這樣做,但不知何故他們沒有工作。 我知道他們有很多類似的問題,但都沒有奏效。 這是我的process_login.php代碼

    <?php
  session_start();
  require_once('connectdatabase.php');

if(isset($_POST) && !empty($_POST)) {
  $username = $_POST['username'];
  $password = $_POST['password'];

  $sql = "SELECT * FROM users WHERE USERNAME='$username' AND PASSWORD='$password'";
  $result = mysqli_query($connection, $sql);
  echo $count = mysqli_num_rows($result);

  if($count == 1) {
    $row = mysqli_fetch_assoc($result);
    $_SESSION['first_name'] = $row["FIRST_NAME"];
    $_SESSION['last_name'] = $row["LAST_NAME"];
    $_SESSION['email'] = $row["EMAIL"];
    $_SESSION['username']=$username;
    header('Location: ../../src/welcome.php');
exit();
  }
  else {
    header('Location: ../../src/index.php');
  }
}
?>

現在我想在welcome.php文件中使用這些變量。

這是我的welcome.php代碼

<?php
  session_start();
  $fist_name = $_SESSION['first_name'];
  echo "<script>console.log('$first_name');</script>";
?>

這是因為你使用$fist_name而不是$first_name 並編輯你的echo部分

<?php
  session_start();
  $fist_name = $_SESSION['first_name'];
  echo "<script>console.log('$first_name');</script>";
?>

<?php
  session_start();
  $first_name = $_SESSION['first_name'];
  echo $first_name;
?>

我想發表評論,但我不能這樣,這是我對你的建議。

當你的問題發生在我身上時,我傾向於$_SESSION所有人的$_SESSION ,看看他們是否真的被設置了。

下面是一個小的PHP腳本,它做同樣的事情,但我使用PDO作為DB API。

if (isset($_REQUEST["pWord"])){
    $inmPword = md5($_REQUEST["pWord"]);

    $loginData = "SELECT * FROM userlogin WHERE pWord = :pWord";
    $loginDataQuery = $dbConnect -> prepare($loginData);
    $loginDataQuery -> bindParam(':pWord', $inmPword);
    $loginDataQuery -> execute();

    if ($row = $loginDataQuery -> fetch(PDO::FETCH_ASSOC)){
        //Time to set the session
        $_SESSION["uId"] = $row["uId"];
        $_SESSION["uRole"] = $row["uRole"];
        $_SESSION["fName"] = $row["fName"];
        $_SESSION["lName"] = $row["lName"];

        echo "3";
    }else{
        echo "4";
    }
}

我認為最好不要進行行計數並回復它。 這樣的事情可能會有所幫助。

 $sql = "SELECT * FROM users WHERE USERNAME='$username' AND PASSWORD='$password'";
  $result = mysqli_query($connection, $sql);

  if($row = mysqli_fetch_assoc($result)) {
    $_SESSION['first_name'] = $row["FIRST_NAME"];
    $_SESSION['last_name'] = $row["LAST_NAME"];
    $_SESSION['email'] = $row["EMAIL"];
    $_SESSION['username']=$username;
    header('Location: ../../src/welcome.php');
exit();
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM