Почему идентификатор сессии сохраняется между сеансами в PHP? - PullRequest
1 голос
/ 19 августа 2011

Рассмотрим следующий код:

<?php
    if (!session_id())
        session_start();
    echo session_id();
    session_destroy();
?>

Почему каждый раз, когда я обновляю эту страницу, она показывает один и тот же идентификатор сеанса, даже если сеанс каждый раз разрушается и воссоздается? Не удаляется ли идентификатор сеанса при уничтожении сеанса?

EDIT:

Я использовал этот обновленный код, основанный на любимом ответе, однако идентификатор сеанса ПОСТОЯННО сохраняется! Есть идеи?

if (!session_id())
        session_start();
echo session_id();

// Unset all of the session variables.
$_SESSION = array();


// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();

Ответы [ 2 ]

6 голосов
/ 19 августа 2011

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

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

http://php.net/manual/en/function.session-destroy.php

В руководстве приведен пример кода:

Пример # 1 Уничтожениесеанс с $ _SESSION

<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();
?>

** Обновление **

Версия PHP 5.3.6-13 Linux lime 3.0.0-1-686-pae # 1 SMP Wed Aug 17 04:28:34 UTC 2011 i686

Apache / 2.2.19 (Debian)

Настройки сеанса (phpinfo)

Directive           Local Value         Master Value
session.auto_start          Off         Off
session.bug_compat_42           Off         Off
session.bug_compat_warn         Off         Off
session.cache_expire            180         180
session.cache_limiter           nocache         nocache
session.cookie_domain           no value            no value
session.cookie_httponly         Off         Off
session.cookie_lifetime         0           0
session.cookie_path         /           /
session.cookie_secure           Off         Off
session.entropy_file            no value            no value
session.entropy_length          0           0
session.gc_divisor          1000            1000
session.gc_maxlifetime          1440            1440
session.gc_probability          0           0
session.hash_bits_per_character         5           5
session.hash_function           0           0
session.name            PHPSESSID           PHPSESSID
session.referer_check           no value            no value
session.save_handler            files           files
session.save_path           /var/lib/php5           /var/lib/php5
session.serialize_handler           php         php
session.use_cookies         On          On
session.use_only_cookies            On          On
session.use_trans_sid           0           0

Обновление

Итак.Следующие настройки приводят к той же проблеме.если и только если я воспринимаю идентификатор сеанса в качестве параметра запроса locahost? PHPSESSID = что угодно

ini_set('session.auto_start', 'on');
ini_set('session.use_trans_sid', 'on');
ini_set('session.use_cookies', 'off');
ini_set('session.use_only_cookies', 'off');

if(!session_id())
  session_start();

echo session_id();
// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();

ВАЖНО: эти настройки важны для сеансаУгон [ Сеанс фиксации ]

0 голосов
/ 19 августа 2011

Это не разрушит ваш sessionID

так что вы бы использовали

<?php
    session_start();
    echo session_id();
    session_destroy();

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...