即使在两个页面上都有** session_start()**,PHP会话变量也不会传递到第二页

时间:2019-05-12 23:40:41

标签: php arrays session session-variables

这是我做的第一个具有数据库和PHP的应用程序,因此我会期望出现一些错误,但是我无法弄清楚我对此做错了什么。

我正在尝试使用JS / JQuery将用户名从登录HTML表单传递到一个PHP文件中,该文件将验证用户名并将该内容从数据库存储到某些$ _SESSION变量中。 换句话说,我只想验证登录页面上的某些内容,因此我可以分配一个变量,该变量将保留整个会话,直到用户注销为止。

它可以在登录页面上正常工作,并且可以将变量打印到控制台,但是当我使用JS重定向到第二页时(在PHP用户验证之后),但是变量在第二页中显示为空。

在我所做的研究中,我发现两个页面都应该具有:

<?php session_start(); ?>

但是即使更改之后,数组$ _SESSION还是空的。

我也确认了会议状态:

<?php session_status(); ?> //This result in a 2, meaning that it's working.

两个页面中的ID相同。

由于这是一个较大的项目,所以我想确保其他任何事情都困扰着它,因此我将其重新创建为一个较小的项目,但仍然遇到问题。这是我在文件中所拥有的:

Index.php

我尽可能地脱衣并检查问题是否仍然存在。 这是PHP / HTML表单,还有JQUERY脚本,它覆盖了按钮功能以执行我需要的操作。

这是文件的开头:

<?php session_start(); ?>

然后身体:

<body class="bg-light">
  <div class="flex-row d-flex justify-content-center">
    <div class="col-xs-12 col-sm-8 col-md-6 col-lg-4" >
      <form class="card" method="post">
        <div class="card-body">
          <div class="form-group">
            <label for="username">User</label>
            <input type="text" class="form-control" id="username" placeholder="" autocomplete="username">
          </div>
          <div class="form-group">
            <label for="pssw">Password</label>
            <input type="password" class="form-control" id="pssw" placeholder="" autocomplete="current-password">
          </div>
          <div class="d-flex justify-content-between">
            <button class="text-center btn btn-primary" id="btn-login">Enter</button>
          </div>
        </div>
      </form>
      <div>
        This is the ID of the session: <?php echo session_id(); ?>
      </div>
    </div>
  </div>

jQuery脚本

  $(document).ready(function () {

    $("#btn-login").click(function(){
      event.preventDefault();
      $.ajax({
        url: "mylogin.php",
        type: "POST",
        data: {
          name: $("#username").val(),
          pssw: $("#pssw").val(),
        },
        success: function(data){
          if (data == true){
            $(location).attr('href', '/page2.php');
          }
        }
      });
    });
  })

Mylogin.php

在这里,我从JQuery脚本中获取了变量,请验证用户和密码是否为'a',然后分配$ _SESSION变量。

<?php

$rawUser = $_POST['name'];
$rawPssw = $_POST['pssw'];

if($rawUser == "a" && $rawPssw == "a"){
  $_SESSION["username"]  = $rawUser;
  $_SESSION["another"]  = "New Test";
  echo true;
} else {
  echo false;
}
?>

Page2.php

此操作的目的只是打印变量,但它们为空。

同样是文件的第一行:

<?php session_start(); ?>

然后是身体:

<body class="bg-light">
  <section class="container" id="login">
    <div class="flex-row d-flex justify-content-center">
      <div class="col-xs-12 col-sm-8 col-md-6 col-lg-4" >
        <h1>This is the second page</h1>
        <div>
          <?php echo "Session status: " . session_status(); ?>
        </div>
        <div>
          <?php echo "Name: " . $_SESSION["username"]; ?>
        </div>
        <div>
          <?php echo "Role: " . $_SESSION["pssw"]; ?>
        </div>
      </div>
    </div>
  </section>
</body>

我期望的是,当加载第二页时,像 $ _ SESSION ['name'] 这样的变量将保留PHP文件分配给它们的任何值。这样,我将能够根据用户的登录设置某些元素的显示。

谢谢。

1 个答案:

答案 0 :(得分:-1)

已解决:我在 mylogin.php 文件的开头缺少session_start()。感谢@ Robot70的注意。