2024年PHP开发者大会(日本)

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 = [] 来注销所有会话变量。

添加注释

用户贡献的注释 3 条注释

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);
?>
jerry
9年前
session_unset和session_destroy的区别如下:

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

但是,将session_unset与session_destroy一起使用是更有效地清除数据的更有效方法。如上例所示,这在跨浏览器方面非常有效。session_destroy是销毁会话。使用session_destroy()来终止所有会话信息……这是更安全的函数。
christian+php at
4个月前
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();
```
To Top