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']); を使用してください。

警告

$_SESSION スーパーグローバルを使用した セッション変数の登録が不可能になってしまうため、 unset($_SESSION) を使って $_SESSION を完全に unset しないでください。

注意:

session_unset() 関数は、 $_SESSION = [] と同等です。

警告

この関数は、セッションがアクティブな場合にのみ動作します。 セッションが開始されていなかったり、既に破棄されている場合には、 この関数は $_SESSION 配列をクリアしません。 すべてのセッション変数をクリアする場合は、 たとえセッションがアクティブでない場合でも $_SESSION = [] を使いましょう。

add a note add a note

User Contributed Notes 8 notes

up
29
tim at leethost dot com
12 years ago
I was having a problem clearing all session variables, deleting the session, and creating a new session without leaving old session stuff behind in all browsers.  The below code is perfect for a logout script to totally delete everything and start new.  It even works in Chrome which seems to not work as other browsers when trying do logout and start a new session.

<?php
    session_start
();
   
session_unset();
   
session_destroy();
   
session_write_close();
   
setcookie(session_name(),'',0,'/');
   
session_regenerate_id(true);
?>
up
13
jerry
8 years ago
The difference between both session_unset and session_destroy is as follows:

session_unset just clears out the session for usage. The session is still on the users computer. Note that by using session_unset, the variable still exists. session_unset just remove all session variables. it does not destroy the session....so the session would still be active.

Using session_unset in tandem with session_destroy however, is a much more effective means of actually clearing out data. As stated in the example above, this works very well, cross browser. session_destroy is destroy the session. session_destroy() to kill all session information.....This is the more secure function to use.
up
1
Anonymous
23 years ago
To further clarify the note above... this can be done via the session handling directives in your php.ini file... there are options to set garbage collection probability (via percent... i.e. 75 means it would run 3 out of every 4 page accesses), and the amount of time a session object can remain active before the garbage collection process sees it as garbage.
up
-14
Jeroen
19 years ago
note to Jason: I don't know the exact mechanics of it (since I'm quite new to sessions) but I think you need to use session_unset() BEFORE you can use session_destroy() at all.  I thought that session_unset() was for scripted variables, and session_destroy() just for anything saved on your side regarding the session.
up
-29
mwgamera at gmail dot com
11 years ago
There is nothing magical about the $_SESSION superglobal and unsetting it.
One has simply to remember that all the session_* functions will use continue to
use exactly that instance of array that was set up by session_start.

Consider this example:
<?php
session_start
();
var_dump($_SESSION);
$a =& $_SESSION;
unset(
$_SESSION);
$a['x'] = 1; // $a refers to the original $_SESSION
$_SESSION['x'] = 2; // new unrelated array
session_write_close();
// saved session contains x => 1
?>
up
-28
00 at f00n dot com
15 years ago
-------------------------------------------------------
InterNic
20-May-2006 11:20
sometimes you might have problems even if using both session_unset and session_destroy. You have to clear the $_SESSION array. I got it working this way:

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

When I used this method the session still existed in structure until the array is reset completely.

This, however, has the drawback of clearing all sessions which may not be ideal in some cases.

Named sessions may help in such cases.
up
-27
zach at zkwarta dot com
18 years ago
The difference between both session_unset and session_destroy is as follows:

session_unset just clears out the sesison for usage. The session is still on the users computer. Note that by using session_unset, the variable still exists.

Using session_unset in tandem with session_destroy however, is a much more effective means of actually clearing out data. As stated in the example above, this works very well, cross browser:

session_unset();
session_destroy();

I noticed that in firefox, one could simply use sesison_unset and the session would be cleared. When trying this on IE, I was horrified to find out that the data was still there, so I had to use session destroy.
up
-45
korteum
8 years ago
While CLI session_unset() doesn't work (it doesn't clear session variables).
Using CLI you must use:

<?php
   
unset($_SESSION);
?>
To Top