【问题标题】:PHP Session variables are not passing to a second page even if it has **session_start()** on both pagesPHP 会话变量不会传递到第二个页面,即使它在两个页面上都有 **session_start()**
【发布时间】:2019-09-29 22:35:11
【问题描述】:

这是我做的第一个具有 DB 和 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 相同。

由于这是一个较大的项目,我想确定是否有其他问题困扰于此,因此我将其重新创建为一个较小的项目,但问题仍然存在。这是我在文件中的内容:

索引.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 文件分配给它们的任何值。这样,我将能够根据用户的登录设置某些元素的显示。

谢谢。

【问题讨论】:

  • 你是在本地主机上开发这个吗?您是否配置了开发域?会话使用 cookie,如果您没有有效的域,则 cookie 经常会出现问题。
  • mylogin.php 有 也在顶部?
  • 确保您可以看到任何可能发生的错误~How to get useful error messages in PHP?
  • @Robot70:将其添加到 mylogin.php 并开始工作。谢谢!

标签: php arrays session session-variables


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2018-09-28
    • 2023-03-13
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多