почему php генерирует одни и те же идентификаторы сессии каждый раз в тестовой среде (WAMP)? - PullRequest
3 голосов
/ 20 мая 2011

Я настроил Wamp в своей системе и выполняю тестирование разработки в этой локальной среде. я работал над функцией выхода из системы и случайно заметил, что генерируемые идентификаторы сеансов в браузере одинаковые.

Например, chrome всегда генерирует идентификатор сессии = abc для всех пользователей даже после выхода из системы и выхода из нее; IE всегда генерирует идентификатор сессии = xyz для всех пользователей.

Это проблема с wamp / моей тестовой средой?

пожалуйста, найдите ниже мой php скрипт выхода из системы -

<?php
session_start();
$sessionid = session_id();
echo $sessionid;
session_unset(); 
session_destroy(); 
?>

Ответы [ 7 ]

7 голосов
/ 20 мая 2011

Вероятно, у вас все еще есть файл cookie со старым идентификатором сеанса, поскольку ни session_unset, ни session_destroy не удаляет этот файл cookie:

Чтобы полностью завершить сеанс, например, выйти из системы, идентификатор сеанса также должен быть не установлен. Если файл cookie используется для распространения идентификатора сеанса (поведение по умолчанию), файл cookie сеанса должен быть удален. 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).

3 голосов
/ 29 ноября 2012

будет работать. Пожалуйста, попробуйте это

session_start(); 
session_regenerate_id(TRUE); 
session_destroy(); 
2 голосов
/ 20 мая 2011

session_destroy () уничтожает все данные, связанные с текущим сеансом.Он не сбрасывает глобальные переменные, связанные с сеансом, и не сбрасывает cookie сеанса.Чтобы снова использовать переменные сеанса, необходимо вызвать метод session_start ().

Чтобы полностью завершить сеанс, например, выйти из системы, идентификатор сеанса также должен быть не установлен.Если файл cookie используется для распространения идентификатора сеанса (поведение по умолчанию), файл cookie сеанса должен быть удален.Для этого можно использовать setcookie ().

Взято из http://php.net/manual/en/function.session-destroy.php

2 голосов
/ 20 мая 2011

Вы должны восстановить идентификатор сеанса, используя функцию session_regenerate_id().Без этого идентификатор сессии будет одинаковым между обновлениями страницы.

1 голос
/ 20 мая 2011

из руководства (session_destroy):

session_destroy () уничтожает все данные, связанные с текущим сеансом.Он не сбрасывает глобальные переменные, связанные с сеансом, и не сбрасывает cookie сеанса.Чтобы снова использовать переменные сеанса, необходимо вызвать метод session_start ().

Чтобы полностью завершить сеанс, например, выйти из системы, идентификатор сеанса также должен быть не установлен.Если файл cookie используется для распространения идентификатора сеанса (поведение по умолчанию), файл cookie сеанса должен быть удален.Для этого можно использовать setcookie ().

Если вы специально не удалили cookie, то cookie все равно будет существовать и при следующем вызове session_start () он будет использовать его в качестве идентификатора сеанса.Закрытие браузера также должно очистить куки, потому что они обычно устанавливаются php, чтобы истечь при закрытии браузера.

1 голос
/ 20 мая 2011

session_unset() и session_destroy() не удаляют cookie сеанса. Вы должны вручную сбросить его с помощью вызова setcookie().

session_unset является противоположностью session_register(), а session_destroy просто очищает $ _SESSION, не затрагивая cookie.

0 голосов
/ 14 сентября 2017

Чтобы прекратить захват сеанса, следуйте приведенному ниже коду в 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...