PHP Conference Japan 2024

session_unset

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

session_unset釋放所有工作階段變數

說明

session_unset(): 布林值

session_unset() 函式會釋放目前已註冊的所有工作階段變數。

參數

此函式沒有參數。

傳回值

成功時傳回 true,失敗時傳回 false

更新日誌

版本 說明
7.2.0 此函式的傳回型別現在是 布林值。以前是 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 */

(譯:/** @return void */)
public static function sayonara():void

(譯:public static function sayonara(): void)

(說明:這是一個名為 sayonara 的公共靜態函式,沒有回傳值。)
{
if (session_status() !== PHP_SESSION_ACTIVE) :void

(譯:if (session_status() !== PHP_SESSION_ACTIVE) : void)

(說明:如果 session 狀態不是啟用中,則執行以下程式碼。)
{
session_start();

(譯:session_start();)

(說明:啟動 session。)
session_unset();

(譯:session_unset();)

(說明:清除所有 session 變數。)
session_destroy();

(譯:session_destroy();)

(說明:銷毀 session。)
session_write_close();

(譯:session_write_close();)

(說明:寫入 session 資料並關閉 session。)
setcookie(session_name(), '', 0, '/');

(譯:setcookie(session_name(), '', 0, '/');)

(說明:設定 session cookie 的有效期限為過去,使其失效。)
session_regenerate_id(true);

(譯:session_regenerate_id(true);)

(說明:重新產生 session ID 並刪除舊的 session 檔案。)
}
}

sayonara();

(譯:sayonara();)

(說明:呼叫 sayonara 函式。這裡似乎有問題,會造成無窮迴圈。)
```

To Top