セッションを再起動したい

 セッションを削除したい場合は session_destroy() を使うとある。

session_destroy

(PHP 4, PHP 5)

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 の値を変更されたら噛み合わなくなる。