有人说使用unset($_SESSION["..."])
,有的说session_unset()
,有的说$_SESSION = array()
,有的说session_destroy()
,我说“看在上帝的份上,这个东西越来越让人困惑,有人可以请我解释一下,这是登录用户的正确/安全的方式吗? out“和什么用于什么?如何在PHP中过期用户的会话?
赞赏...
有人说使用unset($_SESSION["..."])
,有的说session_unset()
,有的说$_SESSION = array()
,有的说session_destroy()
,我说“看在上帝的份上,这个东西越来越让人困惑,有人可以请我解释一下,这是登录用户的正确/安全的方式吗? out“和什么用于什么?如何在PHP中过期用户的会话?
赞赏...
<?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();
?>
的,仅仅说session_unset()
是停留在PHP的版本过时了的 - 函数的被废弃了很长一段时间了。
这个问题的确切答案取决于你的代码用来确定某人是否“登录”v。s。某人“退出”。
如果你有一个你的代码寻找的单一的$_SESSION['logged_in'] = true
,那么为什么取消它呢?只需将其设置为false
并且boom ...用户已注销。
我在[手册](http://uk3.php.net/manual/en/function.session-unset.php)中没有看到'session_unset()'被弃用的引用 - 你能引用这个吗? ? – megaflop
session_unset与session_register相反,不推荐使用。所有会话可变操作都应该直接在$ _SESSION上完成,并将其视为一个常规数组。 –
感谢您的信息。 TBH,我从来没有使用'session_unset()'并且总是使用'$ _SESSION = array()'清除会话变量,因为手册中说我们应该:-) - 仍然,我看到'session_unregister()'_is_标记为已弃用在手册中,但没有'session_unset()'的通知。 – megaflop
session_destroy - 销毁注册到会话
session_unset所有数据 - 免费所有会话变量
http://www.php.net/manual/en/book.session.php
我见过用的最多的是给他们打电话顺序。
session_unset();
session_destroy();
$_SESSION = array();
这里是实体之间的差异
可以在会话
unset($_SESSION['shape']);
这将消除会话中的所有变量删除一个变量,而不是会议本身
session_unset();
这会破坏会话变量
session_destroy();
首先,session_destroy()
是不一样的其他方法。这将破坏服务器上的当前会话数据,但不会取消设置任何变量。它只是session_start()
的对应部分。
session_unset()
是deprecated相当于做$_SESSION = array()
。后者和unset($_SESSION["..."])
只有在unset()
路由只会取消设置一个会话变量([...]
中的一个)时才会有所不同。切勿执行unset($_SESSION)
,因为这会干扰会话机制本身。
如果使用session_destroy()
然后在浏览器中的cookie也cleard(和probbley一个新的会话之后被创建)
本人来说,我使用一个对象(或多个)以跟踪不同的东西(如public loggedIn = False;
和功能女巫actally登录用户)
session_unset()是方便,如果你想保持coockie,但你最终会与SOLU服务器
'session_destroy()'对cookie不做任何事情 - 它删除服务器上存储的会话数据(即用于存储会话变量的临时文件)。它用于保持服务器端的干净,而不会过度依赖垃圾收集器。要删除cookie,您需要将其值设置为空字符串,并将其到期时间设置为过去的时间。 – megaflop
+1更多的空会话和RTM参考。 –
但是,为什么我们没有使用'session_destroy()'来取消所有的$ _SESSION。 'session_destroy()'不会删除所有的变量和数据? – Tarik
当我们调用'session_start()''$ _SESSION'数组从服务器上的会话文件加载到RAM时 - 这是会话变量在请求之间保存的位置。 'session_destroy()'会删除会话文件。它并不清除'$ _SESSION'数组。 – megaflop