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

Maw*_*awg 31 php

这够了吗?

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

if (isset($_SESSION))
{
    unset($_SESSION);
    session_unset();
    session_destroy();
}
Run Code Online (Sandbox Code Playgroud)

当用户Log out从菜单中选择但不退出浏览器时?我想完全删除会话的所有存在和$_SESSION

Pek*_*ica 61

根据手册,还有更多工作要做:

为了完全终止会话,比如要将用户注销,还必须取消设置会话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();
?>
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用`session_unset`而不是`$ _SESSION = array();`? (6认同)
  • @alexw 阅读文档。`注意:仅对不使用 $_SESSION 的较旧的已弃用代码使用 session_unset()。` (2认同)