Я работаю над своим собственным учебным проектом для удовольствия и последние несколько недель бьюсь головой о стену. У меня есть переменные сеанса, которые просто не существуют, когда они должны, и наоборот.
На «example.com/dashboard», $_SESSION['user']
существует, а затем при переходе на «example.com/app/list»"есть проверка оператора if, если она существует и установлена.
<?php
session_start();
if(!isset($_SESSION['user'])) {
$_SESSION['errorMessage'] = "You are not logged in yet!";
header('Location: /');
exit;
}
Несмотря на то, что я проверил, что $_SESSION['user']
установлено на example.com/dashboard, оператор if возвращает false и выдает меня встраница входа.
* В моем случае страница входа - это мой index.php в корне моего сайта.
Теперь на этой странице входа вы должны бытьнемедленно перенаправляется на панель управления, если установлена $_SESSION['user']
.
<?php
session_start();
if(isset($_SESSION['user'])) {
header('Location: /dashboard');
exit();
}
Как я уже говорил, она установлена, но как-то нет. При обновлении он отправляет меня на панель инструментов (что должно произойти, если установлено $_SESSION['user']
.)
Это проблема первая.
Теперь на "example.com/register",пока он не вошел в систему (сеанс был уничтожен при выходе из системы с использованием session_unset, session_destroy и т. д.), $_SESSION['user']
не существует. После нажатия на кнопку отправки, каким-то образом $_SESSION['user']
устанавливается на то, что было, когда вы вошли в систему. Абсолютно нигде нет фрагмента кода, который устанавливает $_SESSION['user']
на что-либо, кроме сценария входа в систему. На моей странице регистрации нет ничего, что позволило бы это. Это как если бы после выхода из системы сеанс был сохранен.
Код с моей корневой страницы, также называемый формой входа (index.php
):
<?php
session_start();
if(isset($_SESSION['user'])) {
header('Location: /dashboard');
exit();
}
Код из dashboard.php
:
<?php
session_start();
if(!isset($_SESSION['user'])) {
$_SESSION['errorMessage'] = "You are not logged in yet!";
header('Location: /');
exit;
}
Код от моего logout.php
(так как, возможно, придется что-то с этим делать):
<?php
session_start();
if(!isset($_SESSION['user'])) {
$_SESSION['errorMessage'] = "You are not logged in yet!";
header("Location: ../");
die();
}
//clear session from globals
$_SESSION = array();
session_unset();
session_destroy();
unset($_SESSION);
header("Location: ../");
die;
На моем register.php
:
<?php
session_start();
//register stuff ^^^^^
//eventually, mail to registerer
if (mail($to, $subject, $htmlContent, $headers)) {
$connect->query($sqlInsert);
$_SESSION['register_success'] = true;
header("Location: https://example.com/register-success");
exit;
}
Тогда на моемregister-success.php
:
session_start();
if(!isset($_SESSION['register_success'])) {
$_SESSION['errorMessage'] = "An error has occured, please try again.";
header("Location: https://example.com/register");
exit;
}
Имейте в виду, что всякий раз, когда я отправляю регистрацию, я получаю электронное письмо, поэтому $_SESSION['register_success']
должно быть установлено, но все равно выдает false в операторе if на example.com/register-success "
То, что я пробовал:
session_start();
в начале каждого сценария. session_destroy()
, session_unset()
, $_SESSION = array()
, unset($_SESSION)
при выходе из системы, а затем их комбинация. - Проверка соответствия всех имен переменных сеанса, что я и сделал.
Iпонятия не имею, почему это происходит.
Заранее извиняюсь, если я объяснил это ужасно.
Спасибо, что прочитали.