2011-10-12 56 views
4

有人说使用unset($_SESSION["..."]),有的说session_unset(),有的说$_SESSION = array(),有的说session_destroy(),我说“看在上帝的份上,这个东西越来越让人困惑,有人可以请我解释一下,这是登录用户的正确/安全的方式吗? out“和什么用于什么?如何在PHP中过期用户的会话?

赞赏...

回答

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

+0

+1更多的空会话和RTM参考。 –

+0

但是,为什么我们没有使用'session_destroy()'来取消所有的$ _SESSION。 'session_destroy()'不会删除所有的变量和数据? – Tarik

+1

当我们调用'session_start()''$ _SESSION'数组从服务器上的会话文件加载到RAM时 - 这是会话变量在请求之间保存的位置。 'session_destroy()'会删除会话文件。它并不清除'$ _SESSION'数组。 – megaflop

0

的,仅仅说session_unset()是停留在PHP的版本过时了的 - 函数的被废弃了很长一段时间了。

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

如果你有一个你的代码寻找的单一的$_SESSION['logged_in'] = true,那么为什么取消它呢?只需将其设置为false并且boom ...用户已注销。

+0

我在[手册](http://uk3.php.net/manual/en/function.session-unset.php)中没有看到'session_unset()'被弃用的引用 - 你能引用这个吗? ? – megaflop

+0

session_unset与session_register相反,不推荐使用。所有会话可变操作都应该直接在$ _SESSION上完成,并将其视为一个常规数组。 –

+0

感谢您的信息。 TBH,我从来没有使用'session_unset()'并且总是使用'$ _SESSION = array()'清除会话变量,因为手册中说我们应该:-) - 仍然,我看到'session_unregister()'_is_标记为已弃用在手册中,但没有'session_unset()'的通知。 – megaflop

0

session_destroy - 销毁注册到会话
session_unset所有数据 - 免费所有会话变量

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

我见过用的最多的是给他们打电话顺序。

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

这里是实体之间的差异

可以在会话

unset($_SESSION['shape']); 

这将消除会话中的所有变量删除一个变量,而不是会议本身

session_unset(); 

这会破坏会话变量

session_destroy(); 
1

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

session_unset()deprecated相当于做$_SESSION = array()。后者和unset($_SESSION["..."])只有在unset()路由只会取消设置一个会话变量([...]中的一个)时才会有所不同。切勿执行unset($_SESSION),因为这会干扰会话机制本身。

Old question reference.

0

如果使用session_destroy()然后在浏览器中的cookie也cleard(和probbley一个新的会话之后被创建)

本人来说,我使用一个对象(或多个)以跟踪不同的东西(如public loggedIn = False;和功能女巫actally登录用户)

session_unset()是方便,如果你想保持coockie,但你最终会与SOLU服务器

+0

'session_destroy()'对cookie不做任何事情 - 它删除服务器上存储的会话数据(即用于存储会话变量的临时文件)。它用于保持服务器端的干净,而不会过度依赖垃圾收集器。要删除cookie,您需要将其值设置为空字符串,并将其到期时间设置为过去的时间。 – megaflop