Почему теряется сессия PHP при нажатии кнопки назад?
Добрый день!
Начал делать простую форму авторизации на PHP.
Сделал, например, 3 страницы: index.php , login.php и catalog.php.
Пользователь вводит логин и пароль на странице index.php , попадает на страницу login.php , где стартует сессия <? session_start(); ?> и создается переменная сессии $_SESSION['logged'].
На странице catalog.php , которая тоже увязана в эту сессию, проверяем isset($_SESSION['logged']) и если оно есть выводим контент. Всё работает :)
А теперь о печальном :) При нажатии кнопки назад или ссылки вернуться назад на последней странице в связке (catalog.php), получаем ошибку "Не удается получить доступ к сайту". Помогите пожалуйста разобраться. Что я забыл?
Как я понял, не сохраняется сессия. При прямых переходах сессия продолжается, а при нажатии назад обрубается.
Настройки сессии гляньте в phpinfo
Скорее всего она у вас не на куках, а на ссылках. Ну и везде должна стартовать сессия в начале файла, где она должна быть.
Uzumeti, нет. https://www.php.net/manual/ru/session.configuration.php
session.use_trans_sid boolean
session.use_trans_sid указывает, используется ли прозрачная поддержка sid или нет. По умолчанию 0 (отключено).
Замечание: Управление сессией на основе URL имеет дополнительные риски безопасности по сравнению с управлением на основе cookies. В качестве примера можно упомянуть такие ситуации, когда пользователи могут отправить URL, содержащий идентификатор активной сессии, своим друзьям по электронной почте или сохранить ссылку с идентификатором в закладках и все время посещать сайт с одним и тем же идентификатором. Начиная с PHP 7.1.0, полный путь URL, то есть https://php.net/, обрабатывается "trans sid". Раньше PHP обрабатывал только относительный URL-адреса. Перезапись целевого хоста задается session.trans_sid_hosts.
Это
Uzumeti, так сессия в каждом файле стартует?
То есть есть файл каталог, сверху него подключается файл типо ядра. Сессия, буфер, подключение к бд, настройки кодировки и тд. При создании нового файла, вы так же подключаете это ядро. Тогда сессия будет в любом файле по ссылкам. Даже в той же регистрации или авторизации вы проверяете сессию на наличие.
Это легко проверить сделав var_dump($_SESSION); и это надежнее чем гадать. Скорее всего с логикой какая-то проблема.
"Не удается получить доступ к сайту".
Это ответ браузера или ответ сервера? Смотрите в консоли раздел network - какой код ответа отдает сервер на этот запрос, скорее всего к сессии это не имеет отношения.
И хоть в разделе network почему-то пусто, я увидел другое предупреждение в консоле: The FetchEvent for "https://app.itbconsult.ru/login.php" resulted in a network error response: the promise was rejected.
И похоже проблема связана с неправильным функционированием кэша PWA.