如何在PHP中使用户的会话失效?

时间:2011-10-12 19:49:02

标签: php session

有些人说使用unset($_SESSION["..."])而有些人说session_unset()而有些人说$_SESSION = array()而有些人说session_destroy()而我说“为了上帝的缘故,这些东西让人感到困惑,有人可以解释一下,将用户登出的正确/安全方式是什么?以及用于什么的用途?

赞赏...

6 个答案:

答案 0 :(得分:4)

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

RTM

答案 1 :(得分:1)

这是实体之间的区别

您可以删除会话中的单个变量

 unset($_SESSION['shape']);

这将删除会话中的所有变量,但不删除会话本身

 session_unset();

这会破坏会话变量

 session_destroy();

答案 2 :(得分:1)

首先,session_destroy()与其他方法不同。这个会破坏服务器上的当前会话数据,但不会取消设置任何变量。它只是session_start()的对应部分。

session_unset() deprecated 等同于执行$_SESSION = array()。后者和unset($_SESSION["..."])的区别仅在于unset()路由只会取消设置一个会话变量,即[...]中命名的变量。永远不要unset($_SESSION),因为这会干扰会话机制本身。

Old question reference.

答案 3 :(得分:0)

唯一说session_unset()的是那些停留在PHP过时版本上的版本 - 该函数现已被弃用了很长时间。

这个问题的确切答案取决于您的代码使用什么来确定是否有人“登录”v。某人“退出”。

如果您的代码需要一个$_SESSION['logged_in'] = true,那么为什么要取消它?只需将其设置为false并激活...用户已注销。

答案 4 :(得分:0)

session_destroy - 销毁注册到会话的所有数据
session_unset - 释放所有会话变量

http://www.php.net/manual/en/book.session.php

我见过的最多就是按此顺序调用它们。

session_unset();
session_destroy();
$_SESSION = array();

答案 5 :(得分:0)

如果您使用session_destroy(),那么浏览器中的cookie也会清除(并且稍后会创建新会话)

personaly我使用一个或多个对象来跟踪不同的事物(比如public loggedIn = False;和一个功能,以便用户记录用户)

如果你想保留coockie,

session_unset()很方便,但你最终会在服务器中有更多的空会话