完全销毁会话的最佳方法 - 即使浏览器未关闭

问题描述 投票:0回答:2

够了吗

session_start();   //  Must start a session before destroying it

if (isset($_SESSION))
{
    unset($_SESSION);
    session_unset();
    session_destroy();
}

当用户从菜单中选择

Log out
,但不退出浏览器时? 我想完全删除会话的所有存在并且
$_SESSION

php
2个回答
69
投票

根据手册,还有更多要做的事情:

为了完全终止会话,就像注销用户一样,会话 ID 也必须取消设置。如果使用 cookie 来传播会话 ID(默认行为),则必须删除会话 cookie。 setcookie() 可以用于此目的。

手动链接有一个关于如何做到这一点的完整工作示例。从那里偷来的:

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

0
投票

我到底该在哪里输入这些内容?当网页显示“您已经打开了另一个会话”但找不到该会话时该怎么办?我找到的唯一方法是关闭浏览器、关闭计算机并花两个小时找点事情做。如果没有进一步的解释,这没有任何帮助。

© www.soinside.com 2019 - 2024. All rights reserved.