有些人说使用unset($_SESSION["..."])
而有些人说session_unset()
而有些人说$_SESSION = array()
而有些人说session_destroy()
而我说“为了上帝的缘故,这些东西让人感到困惑,有人可以解释一下,将用户登出的正确/安全方式是什么?以及用于什么的用途?
赞赏...
答案 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();
?>
答案 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)
,因为这会干扰会话机制本身。
答案 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;
和一个功能,以便用户记录用户)
session_unset()很方便,但你最终会在服务器中有更多的空会话