セッションに登録されたデータを全て破棄する

# session_destroy

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

session_destroy — セッションに登録されたデータを全て破棄する

### 説明

function session_destroy(): bool

session_destroy()は、現在のセッションに 関連づけられたすべてのデータを破棄します。この関数は、 セッションに関するグローバル変数を破棄しません。 また、セッションクッキーを破棄しません。 セッション変数の利用を再開するには session_start() をコールする必要があります。

> 注意: 通常のコードでは、session_destroy() を呼ぶ必要はありません。 セッションデータを破棄するよりも、 $_SESSION 配列をクリーンアップしてください。

セッションを切断するには、 セッション ID の割り当ても解除する必要があります。セッション ID の受け渡しに クッキーが使用されている場合（デフォルト）には、セッションクッキーも 削除されなければなりません。 そのために setcookie() が利用できます。

session.use_strict_mode が有効になっている場合、 古くなった セッションID のクッキーを削除する必要はありません。 なぜなら、セッションモジュールはセッションIDに紐付いたデータがないとき、 セッションID のクッキーを受け入れないからです。 全てのサイトで、 session.use_strict_mode を有効にすることを推奨します。

警告

すぐにセッションを削除してしまうと、 望まない結果が起こる可能性があります。 並列にリクエストが行われたときに、 他のリクエストの接続は突然データが消えたように見えるかもしれません。 たとえば、JavaScript または/もしくは URLリンクからのリクエストが同時に実行された場合です。

現在のセッションモジュールは、空のセッションIDを受け入れません。 しかし、すぐにセッションを削除してしまうと、 クライアント(ブラウザ)サイドとの競合によって、 空のセッションIDクッキーが発生するかもしれません。 これにより、不必要なのにクライアント側が たくさんのセッションIDを作ってしまうことになります。

こうした事象を防ぐためには、 $_SESSION に削除時のタイムスタンプを設定し、 それより後のアクセスを拒否するようにしなければなりません。 もしくは、アプリケーションが同時に 複数のリクエストを受け付けないようにすることです。 同じことは、session_regenerate_id() 関数にも当てはまります。

### パラメータ

この関数にはパラメータはありません。

### 戻り値

成功した場合に `true` を、失敗した場合に `false` を返します。

### 例

例1 $_SESSIONでセッションを破棄する

    <?php
    // セッションの初期化
    // session_name("something")を使用している場合は特にこれを忘れないように!
    session_start();

    // セッション変数を全て解除する
    $_SESSION = array();

    // セッションを切断するにはセッションクッキーも削除する。
    // Note: セッション情報だけでなくセッションを破壊する。
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }

    // 最終的に、セッションを破壊する
    session_destroy();
    ?>

### 参考

- session.use_strict_mode
- session_reset() - session 配列を元の値で再初期化する
- session_regenerate_id() - 現在のセッションIDを新しく生成したものと置き換える
- unset() - 指定した変数の割当を解除する
- setcookie() - クッキーを送信する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open