无法删除会话和Cookie

时间:2015-09-16 22:55:13

标签: php session cookies

无法删除会话和Cookie

我是PHP会话的新手。 我过去使用过很多饼干。 我似乎无法摆脱这个cookie - 无论我做什么!

我似乎能够清除会话 - 但cookie仍然存在。

我尝试了所有这些:..和更多:

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

if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

?>

以上来自:http://php.net/manual/en/function.session-destroy.php

<script>
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++)
  eraseCookie(cookies[i].split("=")[0]);
</script>

Cookie不会删除的原因是什么?

1 个答案:

答案 0 :(得分:1)

这是因为php中的会话工作。当您启动会话时,会生成一个唯一的字符串,该字符串充当会话的cookie值。您在会话中存储的所有数据都存储在与唯一字符串对应的文件中。现在当你销毁一个会话时,它不会破坏会话字符串,而是会破坏与存储在服务器上的字符串相对应的值。

因此即使cookie存在但没有与之对应的数据,因此对于下一个请求,会话实际上是空的。