Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】session_unset()関数の使い方

session_unset関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

session_unset関数は、現在のセッションに関連付けられた全てのセッション変数の登録を解除する関数です。具体的には、グローバル変数 $_SESSION に格納されている全ての値を削除します。この関数を実行しても、セッション自体は破棄されず、セッションIDも変更されません。セッションを完全に破棄するには、session_destroy 関数を使用する必要があります。

session_unset 関数は、セッションデータを個別に削除する代わりに、セッション全体をリセットしたい場合に便利です。例えば、ユーザーがログアウトした際に、そのユーザーのセッションに関連付けられた全ての情報を削除するために使用できます。

この関数は引数を必要としません。関数を呼び出すと、現在のセッションの $_SESSION 配列の内容が空になります。ただし、この変更はスクリプトの実行中にのみ有効であり、実際にセッションデータが削除されるのは、スクリプトの実行が終了し、セッションデータが保存される時点です。

session_unset 関数を使用する前に、session_start 関数を呼び出してセッションを開始する必要があります。セッションが開始されていない状態で session_unset を呼び出すと、期待どおりに動作しない可能性があります。また、セッション変数を個別に削除する場合は、unset($_SESSION['変数名']) のように、unset関数を個別のセッション変数に対して使用します。

構文(syntax)

1session_unset(): void

引数(parameters)

引数なし

引数はありません

戻り値(return)

true

セッション変数をすべて解除した場合、true を返します。

サンプルコード

PHP session_unset でセッション変数を削除する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * session_unset() 関数の使用例を示します。
7 * 
8 * この関数は、現在登録されているすべてのセッション変数を解放(未設定に)します。
9 * $_SESSION スーパーグローバル配列が空の配列になります。
10 *
11 * 実行手順:
12 * 1. このファイルをWebサーバーのドキュメントルートに配置します。
13 * 2. Webブラウザでこのファイルにアクセスします。
14 * 3. 実行前と実行後で $_SESSION の内容が変化することを確認できます。
15 */
16function demonstrateSessionUnset(): void
17{
18    // セッションを開始します。セッション関連の関数を使用する前に必ず呼び出す必要があります。
19    if (session_status() === PHP_SESSION_NONE) {
20        session_start();
21    }
22
23    // --- 1. セッションに変数を設定する ---
24    $_SESSION['username'] = 'Taro Yamada';
25    $_SESSION['user_id'] = 12345;
26    $_SESSION['last_login'] = date('Y-m-d H:i:s');
27
28    echo '<h1>session_unset() 実行前</h1>';
29    echo '<p>$_SESSION の内容:</p>';
30    echo '<pre>';
31    print_r($_SESSION);
32    echo '</pre>';
33    echo '<hr>';
34
35    // --- 2. すべてのセッション変数を削除する ---
36    // この関数を呼び出すと、$_SESSION 配列の中身がすべてクリアされます。
37    // セッションID自体は破棄されません。
38    session_unset();
39
40    echo '<h1>session_unset() 実行後</h1>';
41    echo '<p>$_SESSION の内容 (空になっていることを確認):</p>';
42    echo '<pre>';
43    print_r($_SESSION);
44    echo '</pre>';
45
46    // --- 3. 参考: セッションを完全に終了する ---
47    // ログインセッションを完全に破棄する場合は、セッションIDも削除する
48    // session_destroy() も併せて呼び出すのが一般的です。
49    // session_destroy();
50}
51
52demonstrateSessionUnset();
53

PHPの session_unset() 関数は、現在実行中のセッションに保存されている全ての変数を削除するための関数です。この関数を呼び出すと、スーパーグローバル変数 $_SESSION に格納されている全てのキーと値のペアが解放され、$_SESSION 配列は空になります。この関数は引数を取らず、戻り値として常に true を返します。

サンプルコードでは、まず session_start() でセッションを開始し、$_SESSION 配列にユーザー名やIDなどのデータを意図的に設定します。session_unset() を実行する前の $_SESSION の内容を表示した後、この関数を呼び出します。その結果、実行後には $_SESSION 配列が空になっていることが画面上で確認でき、全てのセッション変数が削除されたことが明確にわかります。

注意点として、この関数はあくまでセッション変数を空にするだけで、セッションそのもの(セッションIDや関連ファイル)を破棄するわけではありません。ユーザーのログアウト処理のようにセッションを完全に終了させたい場合は、session_destroy() 関数も併用するのが一般的です。

session_unset() 関数は、セッションに保存された全ての変数を削除し、$_SESSION 配列を空にする機能を持っています。最も注意すべき点は、この関数がセッションの「データ」のみを削除し、セッション自体(セッションID)は破棄しないことです。そのため、この関数を実行してもセッションは有効なまま維持されます。ユーザーのログアウト処理のようにセッションを完全に終了させたい場合は、セッションIDを破棄する session_destroy() 関数も一緒に呼び出すのが一般的です。また、全てのセッション関連の関数は、必ず session_start() を呼び出した後に実行する必要があります。

PHPでセッション変数を全て解除する

1<?php
2
3/**
4 * セッション変数を設定し、その後 session_unset() を使用して
5 * 全てのセッション変数を解除するサンプルコードです。
6 *
7 * session_unset() は、$_SESSION スーパーグローバル配列に登録されている
8 * 変数を全て削除しますが、セッション自体は破棄せず、セッションIDも維持します。
9 */
10
11// 1. セッションを開始します。
12//    session_start() は、既存のセッションを復元するか、
13//    新しいセッションを開始するために必要です。
14session_start();
15
16echo "<h3>1. セッション変数を設定:</h3>\n";
17
18// セッションにいくつかのダミーデータを設定します。
19$_SESSION['username'] = 'sample_user';
20$_SESSION['user_id'] = 1001;
21$_SESSION['login_status'] = true;
22$_SESSION['cart_items'] = ['item_A', 'item_B'];
23
24// 設定後の $_SESSION の内容を表示して確認します。
25echo "<p>セッション変数設定後の \$_SESSION:</p>\n";
26var_dump($_SESSION);
27
28echo "<h3>2. session_unset() を実行してセッション変数を解除:</h3>\n";
29
30// session_unset() 関数を呼び出します。
31// これにより、$_SESSION 配列内の全てのキーと値が削除されます。
32session_unset();
33
34// session_unset() 実行後の $_SESSION の内容を表示して確認します。
35// $_SESSION が空の配列になっているはずです。
36echo "<p>session_unset() 実行後の \$_SESSION:</p>\n";
37var_dump($_SESSION);
38
39echo "<h3>3. セッションIDの確認:</h3>\n";
40
41// session_unset() はセッション変数をクリアするだけで、
42// セッション自体は破棄されないため、セッションIDは引き続き有効です。
43echo "<p>現在のセッションID: " . session_id() . "</p>\n";
44
45// 必要であれば、セッションを完全に終了させるために session_destroy() を使用します。
46// session_destroy();
47// echo "<p>注: session_destroy() を実行すると、サーバー上のセッションデータが削除され、セッションIDも無効になります。</p>\n";
48
49?>

PHP 8のsession_unset関数は、現在アクティブなセッションに保存されている全てのセッション変数を解除するために使用されます。この関数は引数を取らず、正常に処理が完了するとtrueを返します。

サンプルコードでは、まずsession_start()関数を用いてセッションを開始しています。セッションを利用するには、この関数を最初に呼び出す必要があります。次に、$_SESSIONスーパーグローバル配列にusernameuser_idといったダミーデータを設定し、var_dumpで現在のセッション内容を確認します。

その後、session_unset()関数を呼び出すと、$_SESSION配列に設定されていた全てのキーと値が削除されます。再度var_dumpで確認すると、$_SESSIONが空になっていることがわかります。

この関数の重要な特徴は、セッション変数のみをクリアし、セッション自体やセッションIDは破棄しない点です。そのため、session_id()関数でセッションIDを確認すると、session_unset()の実行後も同じセッションIDが維持されていることが確認できます。もしセッションそのものを完全に終了させ、サーバー上のセッションデータも削除したい場合は、session_destroy()関数を使用します。session_unsetは、ユーザー固有のデータをリセットしつつ、セッションの継続性を保ちたい場合に役立ちます。

session_unset()は、session_start()でセッションが開始された後にのみ使用可能です。この関数は、$_SESSIONスーパーグローバル配列に設定された全ての変数を削除しますが、セッション自体やセッションIDは保持したままです。そのため、ユーザーのセッションはサーバー上で引き続き有効な状態であり、セッションクッキーも破棄されません。セッションを完全に終了させ、サーバー上の関連データやセッションIDを無効にしたい場合は、別途session_destroy()関数を実行する必要があります。特定のセッション変数のみを削除したい場合には、unset($_SESSION['キー名'])を使用してください。session_unset()の戻り値は常にtrueですが、これは関数が実行されたことを示すもので、セッションの状態を判断するものではありません。

PHPセッションの解放と破棄を理解する

1<?php
2
3/**
4 * session_unset() の正しい使い方とセッションを完全に破棄する方法を示すサンプルコード
5 *
6 * 「php session unset not working」という問題は、多くの場合、セッションを完全に
7 * 終了させるために session_destroy() やセッションクッキーの削除が必要であることへの
8 * 誤解から生じます。このコードは、その一連の流れを示します。
9 */
10
11// セッション関連の関数を使用する前に、必ずセッションを開始します。
12session_start();
13
14// ログアウトリンクがクリックされた場合 (例: index.php?action=logout)
15if (isset($_GET['action']) && $_GET['action'] === 'logout') {
16    // 1. すべてのセッション変数を解放します。
17    // これにより $_SESSION 配列は空になりますが、セッション自体はまだ存在します。
18    session_unset();
19
20    // 2. セッションを完全に破棄します。
21    // サーバー上のセッションファイルが削除されます。
22    session_destroy();
23
24    // 3. ブラウザのセッションクッキーを削除します (推奨される手順)。
25    // これにより、ユーザーが次にアクセスしたときに新しいセッションが開始されます。
26    // この処理がないと、同じセッションIDが送信され続け、意図しない挙動の原因になることがあります。
27    if (ini_get("session.use_cookies")) {
28        $params = session_get_cookie_params();
29        setcookie(
30            session_name(),
31            '',
32            time() - 42000,
33            $params["path"],
34            $params["domain"],
35            $params["secure"],
36            $params["httponly"]
37        );
38    }
39
40    // ログアウト完了メッセージを表示して処理を終了します。
41    header("Location: " . strtok($_SERVER["REQUEST_URI"], '?'));
42    exit;
43}
44
45// セッション変数がまだ設定されていない場合 (例: 初回アクセス時)
46if (!isset($_SESSION['user_id'])) {
47    echo "<h1>ようこそ!</h1>";
48    echo "<p>セッションを開始し、情報を保存します。</p>";
49    // サンプル用のセッション変数を設定します。
50    $_SESSION['user_id'] = 12345;
51    $_SESSION['username'] = 'Taro Yamada';
52    $_SESSION['login_time'] = date('Y-m-d H:i:s');
53}
54
55// 現在のセッション情報を表示します。
56echo "<h2>現在のセッション情報</h2>";
57echo "<pre>";
58print_r($_SESSION);
59echo "</pre>";
60
61// ログアウトするためのリンクを表示します。
62echo '<p><a href="?action=logout">ログアウト</a></p>';
63echo "<p>ログアウトリンクをクリックすると、上記のセッション情報がすべて破棄されます。</p>";
64
65?>

session_unset()は、現在登録されている全てのセッション変数を解放するための関数です。具体的には、$_SESSIONスーパーグローバル配列を空にしますが、セッション自体(セッションIDなど)はサーバー上に存在し続けます。この関数は引数を取らず、戻り値は常にtrueを返します。

このサンプルコードは、まずsession_start()でセッションを開始し、ユーザー情報などを$_SESSIONに保存します。そして「ログアウト」が実行されると、最初にsession_unset()が呼び出され、保存されていたセッション変数が全てクリアされる様子を示しています。

「php session unset not working」という問題は、session_unset()だけではセッションが完全に終了しないという誤解から生じることがよくあります。ユーザーを完全にログアウトさせるなど、セッションを完全に破棄するためには、この関数の後にサーバー上のセッションファイルを削除するsession_destroy()を呼び出し、さらにブラウザのセッションクッキーをsetcookie()で無効にすることが推奨されます。この一連の流れが、安全なセッション終了処理の正しい手順となります。

セッション関連の関数を扱う際は、いかなる処理よりも先にsession_start()を呼び出す必要があります。session_unset()はセッションに保存された変数($_SESSION)を空にするだけで、セッション自体はサーバー上に残ります。そのため、「変数が消えない」という問題は多くの場合、この仕様の誤解から生じます。ログアウト機能のようにセッションを完全に終了させたい場合は、session_unset()に加えて、サーバー上のセッションデータを削除するsession_destroy()を呼び出します。さらに、ブラウザに残るセッションIDを無効化するためにセッションクッキーを削除する処理も併せて行うと、より安全で確実な実装になります。

PHP session_unset()でセッション変数クリア

1<?php
2
3// 1. セッションを開始します。
4// セッションを使用する前に必ずこの関数を呼び出す必要があります。
5session_start();
6
7echo "<h1>session_unset() の動作確認</h1>";
8
9// 2. テスト用のセッション変数をいくつか設定します。
10$_SESSION['user_id'] = 1001;
11$_SESSION['username'] = 'beginner_se';
12$_SESSION['login_time'] = time();
13
14echo "<h2>セッション変数設定後:</h2>";
15echo "<pre>";
16var_dump($_SESSION);
17echo "</pre>";
18
19// 3. session_unset() 関数を呼び出します。
20// この関数は、現在のセッションで登録されている全てのセッション変数を解除(クリア)します。
21// しかし、セッション自体(セッションIDや、サーバー上のセッションファイル)は破棄されません。
22session_unset();
23
24echo "<h2>session_unset() 呼び出し後:</h2>";
25echo "<pre>";
26var_dump($_SESSION); // ここでは空の配列が表示されるはずです。
27echo "</pre>";
28
29// 補足:
30// session_unset() を呼び出すことは、$_SESSION スーパーグローバル配列を空にするのと同等です。
31// 例: $_SESSION = [];
32
33// 「php session unset 消えない」というキーワードについて:
34// session_unset() はセッション変数をクリアしますが、セッションIDは維持されます。
35// そのため、ブラウザは依然として同じセッションIDを持っています。
36// セッションIDを破棄し、サーバー上のセッションファイルも完全に削除したい場合は、
37// session_destroy() 関数を使用する必要があります。
38//
39// session_destroy() を呼び出す例 (このコードでは実行しません):
40// session_destroy();
41//
42// session_destroy() を呼び出した後も、$_SESSION 変数はすぐにクリアされないため、
43// $_SESSION = []; と合わせて使用することが一般的です。
44
45echo "<h2>現在のセッションID (session_unset()後も維持されます):</h2>";
46echo "<p>" . session_id() . "</p>";
47
48// このサンプルコードは、session_unset() がセッション変数を正しくクリアすることを示します。
49// セッションID自体は破棄されないため、「消えない」と感じる場合の原因の一つとなります。
50
51?>

PHP 8 の session_unset 関数は、現在のセッションに登録されている全てのセッション変数を解除(クリア)するために使用されます。この関数は引数を取らず、セッション変数のクリアに成功すると true を返します。

サンプルコードでは、まず session_start() でセッションを開始し、いくつかのセッション変数(user_idusernamelogin_time)を設定しています。var_dump($_SESSION) を使うことで、設定されたセッション変数の内容を確認できます。その後に session_unset() を呼び出すと、$_SESSION スーパーグローバル配列の中身が空になることがわかります。これは、$_SESSION = [] と代入するのと同様の効果があります。

「php session unset 消えない」というキーワードが示すように、この関数はセッション変数をクリアするものの、セッションID自体や、サーバー上に保存されているセッションファイルは破棄しません。サンプルコードの最後に session_id() を表示していることからもわかるように、セッションIDは session_unset() 呼び出し後も維持されます。もし、セッションIDも含めて完全にセッションを破棄したい場合は、session_destroy() 関数を使用する必要があります。session_unset() はセッションの内容だけを消し、セッション自体は維持したい場合に利用します。

session_unset()は現在のセッションに登録されている全てのセッション変数をクリアしますが、セッションIDは維持され、セッション自体は破棄されません。これは$_SESSIONスーパーグローバル配列を空にするのと同等です。「セッションが消えない」と感じる主な理由は、セッションIDがブラウザに保持されたままだからです。

セッションを完全に終了させ、セッションIDも破棄したい場合は、session_destroy()関数を使用する必要があります。session_destroy()を呼び出した後も、$_SESSION変数はすぐにはクリアされないため、安全のために$_SESSION = [];と合わせて記述することをお勧めします。

また、PHPでセッション機能を利用する際は、必ず最初にsession_start()を呼び出す必要がある点に注意してください。

関連コンテンツ