я сконфигурировал wamp в своей системе и занимаюсь тестированием разработки в этой локальной среде. Я работал над функцией выхода из системы и заметил, что генерируемые идентификаторы сеанса одинаковы в браузере.
Например: chrome всегда генерирует session id = abc, для всех пользователей даже после выхода из системы и входа в систему; IE всегда генерирует session id = xyz для всех пользователей.
Является ли это проблемой для wamp / моей тестовой среды?
ниже, мой скрипт php logout –
<?php session_start(); $sessionid = session_id(); echo $sessionid; session_unset(); session_destroy(); ?>
У вас, вероятно, все еще есть файл cookie со старым идентификатором сеанса, поскольку ни session_unset
ни session_destroy
удаляет этот файл cookie:
Чтобы вообще убить сеанс, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса.
setcookie()
может использоватьсяsetcookie()
.
Поэтому используйте setcookie
для setcookie
файла cookie идентификатора сеанса после выхода из системы:
if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); }
Другая рекомендация – восстановить идентификатор сеанса после успешной проверки подлинности, используя session_regenerate_id(true)
.
Будет работать. Попробуйте это
session_start(); session_regenerate_id(TRUE); session_destroy();
Вы должны восстановить идентификатор сеанса, используя функцию session_regenerate_id()
. Без этого идентификатор сеанса будет одинаковым между обновлениями страниц.
session_destroy () уничтожает все данные, связанные с текущим сеансом. Он не отменяет никаких глобальных переменных, связанных с сеансом, или не удаляет cookie сеанса. Чтобы снова использовать переменные сеанса, необходимо вызвать session_start ().
Чтобы вообще убить сеанс, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. Для этого может использоваться setcookie ().
Взято из http://php.net/manual/en/function.session-destroy.php
session_unset()
и session_destroy()
не удаляют cookie сеанса. Вы должны вручную отключить его с помощью setcookie()
.
session_unset – это обращение к session_register()
, а session_destroy просто очищает $ _SESSION, не затрагивая cookie.
из руководства (session_destroy):
session_destroy () уничтожает все данные, связанные с текущим сеансом. Он не отменяет никаких глобальных переменных, связанных с сеансом, или не удаляет cookie сеанса. Чтобы снова использовать переменные сеанса, необходимо вызвать session_start ().
Чтобы вообще убить сеанс, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. Для этого может использоваться setcookie ().
Если вы специально не отменили файл cookie, cookie все равно будет существовать, и в следующий раз вызовите session_start (), он будет использовать это как идентификатор сеанса. Закрытие браузера также должно очистить файл cookie, поскольку они обычно устанавливаются по истечении срока действия php при закрытии браузера.
Чтобы остановить захват сеанса, выполните приведенный ниже код в PHP
session_start(); /* to stop session hijacking */ // Generate new session without destroying the old one session_regenerate_id(false); // Fetch current session ID and close both sessions to allow other scripts to use them $newSession = session_id(); session_write_close(); // Assign session ID to the new one, and start it back up again session_id($newSession); session_start();