session_unset() 被弃用了吗?

9
在PHP文档中,关于session_unset()函数没有任何提示表明该函数已被弃用,因此我认为使用它是没问题的。但当我阅读有关session_destroy()函数的文档时,发现了以下提示:

注意:只有在旧代码中不使用$_SESSION时才使用session_unset()。

我知道session_unset()函数相当于$_SESSION = array();。那么现在我应该使用什么呢?为什么一个网站上会提示该函数已被弃用,而另一个网站上却没有相关提示?这个函数到底怎么样?


1
有一个通知 `注:如果使用了 $_SESSION(或 PHP 4.0.6 或更低版本的 $HTTP_SESSION_VARS),请使用 unset() 注销会话变量,即 unset ($_SESSION['varname']);。`,他们只是没有使用“弃用”一词,但这就是他们想通过该通知表达的意思。 - Daniel W.
session_unset()函数会清除$_SESSION中存储的所有数据,而unset()函数只会清除$_SESSION中的一个数组条目。 - TiMESPLiNTER
只有在不使用 $_SESSION 的旧版本过时代码中才使用 session_unset()。这意味着其中一种过时的函数是 session_register()。 - Funk Forty Niner
对我来说看起来像是一个疏忽:如果session_unset()只取消注册的会话变量,那么在PHP>5.4.0中它就没有用处了,因为session_register()已被删除。如果不是这样,那么手册页面需要进行重写。 - IMSoP
@IMSoP,session_register('foo', 'bar') 相当于 $_SESSION['foo'] = 'bar';,但是 session_unset() 就像 $_SESSION = array();,所以它会取消所有会话数据,而 session_register() 只是注册一个新的键值对。 - TiMESPLiNTER
2个回答

3
我也不知道确切的原因,但我猜测可以在这里找到:https://github.com/php/php-src/blob/master/ext/session/session.c PHP使用ZVAL指针处理变量,我认为他们只是想让_SESSION超全局变量像其他变量一样处理,而不是使用"特殊"命令session_unset()
另一个好处是更好的垃圾回收处理。
有时,“弃用”并不意味着它是一个坏函数,但您不应该使用它,因为代码可能会在未来的软件包中被删除,因为它是不必要的。

1
如果您想关闭会话,必须使用 session_destroy()
session_destroy();

如果您想清除会话变量,必须使用以下方法:
$_SESSION = array();

如果您想清除会话中的一个变量,您必须使用以下命令:

unset($_SESSION['example']);

谢谢你的回答。但是为什么我不应该再使用 session_unset() 呢?我正在寻找原因 - 为什么呢 :-)。 - TiMESPLiNTER
因为 unset($_SESSION['example']); 就足够了 ;) - Kevin Labécot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接