Возможно, я неправильно удалю сеансы PHP, когда пользователь выйдет из системы. Я заметил, что если я выйду из системы и вернусь обратно, не закрывая браузер, идентификатор сеанса не изменится, но если я выйду из системы, закройте окно браузера, откройте новый и войдите в систему, идентификатор сеанса будет отличаться , Нужно ли мне делать что-то другое или это нормальное поведение? Я использую тот же процесс в течение трех лет, но что-то случилось недавно, что заставило меня подумать, что, может быть, мне нужно сделать что-то другое.
Вот что я в основном делаю, когда кто-то нажимает кнопку «Выйти».
<?php session_start(); if( isSet($_SESSION['FacID']) ) $facID = $_SESSION['FacID']; //Want to re-instate this after we destroy the session. unset($_SESSION); session_destroy(); if( isSet($_SESSION['FacID']) ) $_SESSION['FacID'] = $facID; ?>
Если вы чувствуете необходимость принудительного ввода нового идентификатора http://pl.php.net/manual/en/function.session-regenerate-id.php
И на ваш вопрос, из руководства:
session_destroy () уничтожает все данные, связанные с текущим сеансом. Он не отменяет никаких глобальных переменных, связанных с сеансом, или не удаляет cookie сеанса. Чтобы снова использовать переменные сеанса, необходимо вызвать session_start ().
Чтобы вообще убить сеанс, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. Для этого может использоваться setcookie ().
Ваша сессия разрушается.
PHP генерирует только идентификатор сеанса, если браузер не указывает его. Пока сессия была разрушена, с этим нет никаких проблем.
Что с массовым спасением и уничтожением? Просто session_start
и установите переменные. Не нужно уничтожать, а затем перезагружать их!
Ваша «проблема» с браузером заключается в том, что при закрытии окна браузера ваш браузер удаляет куки-файлы, которые PHP отправляет, чтобы он знал идентификатор сеанса. Это опция браузера и не может быть изменена на стороне сервера (если вы не используете ее). Его можно обойти, используя некоторые методы, но это, вероятно, не самый лучший вариант.