Переменные сеанса PHP не передаются на вторую страницу, даже если она имеет ** session_start () ** на обеих страницах - PullRequest
0 голосов
/ 13 мая 2019

Это первое приложение, которое я делаю, которое имеет БД и PHP, поэтому я ожидаю некоторых ошибок, но я не мог понять, что я делаю неправильно с этим.

Я пытаюсь передать имя пользователя из HTML-формы входа в систему с помощью JS / JQuery в файл PHP, который проверит имя пользователя и сохранит содержимое из БД в некоторые переменные $ _SESSION.Другими словами, я просто хочу проверить некоторый контент со страницы входа в систему, чтобы я мог назначить переменную, которая будет хранить весь сеанс до выхода пользователя из системы.

Он работает правильно на странице входа в систему, и я могу печатать переменные на консоли, но когда я перенаправляю с помощью JS на вторую страницу, после проверки пользователем PHP, но переменные на второй странице выглядят пустыми.

В своем исследовании я обнаружил, что обе страницы должны иметь:

<?php session_start(); ?>

Но даже после этого изменения массив $ _SESSION пуст.

Я также подтвердил статус сеанса:

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

И идентификатор одинаков на обеих страницах.

Поскольку это более крупный проект, я хотел быть уверен, что с этим что-то еще беспокоит, поэтому я воссоздал его как меньший проект, и у меня все еще есть проблема.Вот что у меня в файлах:

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 голосов
/ 13 мая 2019

решено: я пропустил session_start () в начале файла mylogin.php . Спасибо @ Robot70 за то, что обратили внимание.

...