Вопрос по php, session – Уничтожение PHP-сессии

1

В стеке потока много страниц о уничтожении сессии. Поверь мне, я их всех читаю и наткнулся на это:Почему мой сеанс остается?

У меня простой вопрос, правда ли, что мне нужно выполнить все перечисленные ниже действия, чтобы правильно уничтожить сеанс?

$tmp = session_id();
session_destroy();
session_id($tmp);
unset($tmp);

Это единственная страница, которая предлагает такие крайние меры. Большинство страниц просто предлагаютsession_destroy();.

Просто чтобы прояснить, потому что, кажется, есть некоторая путаница, я ищу наиболее эффективный и эффективный метод.

Заранее спасибо.

Отличный комментарий @Kerrek, но как мне это сделать? Brett
Помимо уничтожения сеанса, когда вы закончили с ним, вы также должны генерировать новый случайный идентификатор сеанса, когда кто-то входит в систему успешно, чтобы предотвратить фиксацию сеанса. Kerrek SB
Если у вас есть вопрос о чьем-либо ответе, поднимите его там. Зачем создавать новый вопрос. Subir Kumar Sao
Я боюсь, что вам нужно будет делать все эти вещи, если вы хотите, чтобы ваша сессия была полностью разрушена. bodi0
Нет, но на основании этого вопроса и одного в моем вопросе (stackoverflow.com/questions/4921231/why-does-my-session-remain). @subirkumarsao Я задал вопрос как отдельный вопрос, потому что хотел четкого ответа. Я ищу эффективность, этот человек искал инструкции, как сделать что-то. Извините, если мне было неясно, но другие, кажется, поняли. Brett

Ваш Ответ

3   ответа
0
<?php
session_start();
$s_id = session_id();
echo $s_id;


session_destroy();
session_unset();


session_start();
session_regenerate_id(true);
$s_id = session_id();

?>

2

поэтому я добавляю то, что узнал, основываясь на всех ответах. Это совокупность различных ответов. Надеюсь, это поможет другим. Наиболее эффективный метод, который на 100% эффективен для уничтожения сеанса, перечислен ниже:

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 = array();
$tmp = session_id();
session_id($tmp);
unset($tmp);
session_unset();
session_destroy();
session_write_close();
session_regenerate_id(True); // true indicates the need to delete the old session

Спасибо всем за помощь, которая показала мне, как это сделать. Это не было усилием одного человека. Я особенно хотел бы поблагодарить @Kerrek SB, @Uday @Dhruvisha. Если у вас есть другие предложения, пожалуйста, не стесняйтесь добавлять комментарии, и я отредактирую свой ответ.

1

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

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

Example Destroying a session with $_SESSION

// 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();
?>

Посмотри пожалуйстаВот Больше подробностей.

Похожие вопросы