【PHP】セッションの削除の仕方

PHPのセッションの削除方法についての覚書です。

まずは、コード

/**** セッション情報を削除 ****/
//セッション変数を空に
$_SESSION = array();
//セッションクッキー削除
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() - 42000, '/') ;
}
//セッション破棄
session_destroy();

マニュアルでは下のリンク先の通りです。

http://jp.php.net/manual/ja/function.session-destroy.php

ポイントは、サーバー側でセッションを破棄するだけでなく、クライアント側のブラウザのクッキーも削除しなければならない点です。

セッションを紐付けるクッキーは、セッションクッキーと呼ばれるもので、この自動生成されるクッキーも忘れずに削除する必要があります。

公式マニュアルでは、ini_get関数を使って下のようにセッションクッキーを削除しています。

// 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"]
    );
}

ただ、これだと少しややこしいので、

if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() - 42000, '/') ;
}

このように簡略化しても良いと思います。

なお、蛇足ですが、このセッションの削除の処理は、ログアウト時点だけでなく、ログイン処理の最初でも行う方が良さそうです。ログイン前のセッションクッキーを削除することにより、セッションハイジャックの予防的な処理にもなるようです。

カテゴリー: PHP パーマリンク

コメントを残す

メールアドレスが公開されることはありません。