session_unset

(PHP 4, PHP 5, PHP 7, PHP 8)

session_unset释放所有会话变量

描述

session_unset(): bool

session_unset() 函数释放当前注册的所有会话变量。

参数

此函数没有参数。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
7.2.0 此函数的返回值现在是 bool。以前是 void

备注

注意:

如果使用 $_SESSION,请使用 unset() 来注销会话变量,例如 unset($_SESSION['varname']);

警告

不要使用 unset($_SESSION) 来注销整个 $_SESSION,因为这将禁用通过 $_SESSION 超级全局变量注册会话变量。

注意:

使用 session_unset()$_SESSION = [] 相同。

警告

此函数仅在会话处于活动状态时才有效。如果会话尚未启动或已销毁,它不会清除 $_SESSION 数组。使用 $_SESSION = [] 来注销所有会话变量,即使会话未处于活动状态。

添加注释

用户贡献的注释 5 个注释

39
tim at leethost dot com
12 年前
我遇到了一个问题,即无法清除所有会话变量、删除会话并创建新会话,而不会在所有浏览器中留下旧会话内容。以下代码非常适合注销脚本,以完全删除所有内容并开始新的会话。它甚至适用于 Chrome,在尝试注销并启动新会话时,Chrome 的行为似乎与其他浏览器不同。

<?php
session_start
();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
?>
25
jerry
8 年前
session_unset 和 session_destroy 之间的区别如下

session_unset 只是清除会话以供使用。会话仍然存在于用户的计算机上。请注意,通过使用 session_unset,该变量仍然存在。session_unset 只是删除所有会话变量。它不会销毁会话......因此会话仍然处于活动状态。

但是,将 session_unset 与 session_destroy 结合使用,是实际上清除数据的更有效方法。如上面的示例所示,这在跨浏览器中非常有效。session_destroy 是销毁会话。session_destroy() 用于杀死所有会话信息......这是更安全的函数。
0
christian+php at
1 个月前
tim at leethost dot com 提供的解决方案很好,但您必须先检查活动会话,因为否则您会在日志中填入 PHP 错误或通知(取决于您的设置)。我将其用作函数,并且它运行得很顺利。

```php
/** @return void */
public static function sayonara():void
{
if (session_status() !== PHP_SESSION_ACTIVE) :void
{
session_start();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(), '', 0, '/');
session_regenerate_id(true);
}
}

sayonara();
```
-18
Jeroen
19 年前
注意 Jason:我不知道它的确切机制(因为我对会话还很陌生),但我认为您需要在使用 session_destroy() 之前使用 session_unset()。我以为 session_unset() 用于脚本变量,而 session_destroy() 只是用于您这边保存的有关会话的任何内容。
-22
zach at zkwarta dot com
19 年前
session_unset 和 session_destroy 之间的区别如下

session_unset 只是清除会话以供使用。会话仍然存在于用户的计算机上。请注意,通过使用 session_unset,该变量仍然存在。

但是,将 session_unset 与 session_destroy 结合使用,是实际上清除数据的更有效方法。如上面的示例所示,这在跨浏览器中非常有效

session_unset();
session_destroy();

我注意到,在 Firefox 中,只需使用 sesison_unset 即可清除会话。当我在 IE 上尝试此操作时,我惊恐地发现数据仍然存在,因此我不得不使用 session destroy。
To Top