セッションを再起動したい
セッションを削除したい場合は session_destroy() を使うとある。
session_destroy
session_destroy ― セッションに登録されたデータを全て破棄する
説明
bool session_destroy ( void )session_destroy()は、現在のセッションに 関連づけられた全てのデータを破棄します。この関数は、 セッションに関するグローバル変数を破棄しません。 また、セッションクッキーを破棄しません。
ユーザーがログアウトするときのように、セッションを切断するには、 セッション ID の割り当ても解除する必要があります。セッション ID の受け渡しに クッキーが使用されている場合(デフォルト)には、セッションクッキーも 削除されなければなりません。 そのためには setcookie() が利用できます。
PHP: session_destroy - Manual
しかしセッションID をクッキーでやり取りしている場合、session_destroy() の後の session_start() でセッションID が変わらない。折角破棄したのに、これではあまり嬉しくない。
なのでセッションを破棄して、ID を変えて再起動したい場合は $_COOKIE からセッションID の値を消してやる必要がある。
session_destroy(); // セッション破棄
unset($_COOKIE[session_name()]); // セッションID を完全に削除
session_start(); // セッション再起動
同様にセッションID をGET/POST のクエリで受け取る場合も、同様に $_GET,$_POST,$_REQUEST からセッション名の値を削除する必要がある。
まとめてやるなら下記のようなイメージ。
if (ini_get('session.use_cookies') && isset($_COOKIE[session_name()])) { // クッキーの値からセッションID を破棄 unset($_COOKIE[session_name()]); } else if (!ini_get('session.use_only_cookies')) { // リクエストクエリの値からセッションID を破棄 unset($_GET[session_name()]); unset($_POST[session_name()]); unset($_REQUEST[session_name()]); }
ただしこれもセッション起動の後に ini の値を変更されたら噛み合わなくなる。