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, '/') ; }
このように簡略化しても良いと思います。
なお、蛇足ですが、このセッションの削除の処理は、ログアウト時点だけでなく、ログイン処理の最初でも行う方が良さそうです。ログイン前のセッションクッキーを削除することにより、セッションハイジャックの予防的な処理にもなるようです。