PHPのsession_destroy()マニュアルにあるように:
session_destroy()は、現在のセッションに関連付けられているすべてのデータを破棄します。セッションに関連付けられているグローバル変数の設定を解除したり、セッションCookieの設定を解除したりすることはありません。セッション変数を再度使用するには、session_start()を呼び出す必要があります。
ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッションIDも設定解除する必要があります。Cookieを使用してセッションIDを伝播する場合(デフォルトの動作)、セッションCookieを削除する必要があります。そのためにsetcookie()を使用できます。
PHPマニュアルからの直接の例:
<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
?>
この例を関数に適用します。
function killsession()
{
// start the session, if started before, comment
session_start();
// Unset all of the session variables.
$_SESSION = array();
// destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// destroy the session.
session_destroy();
// direct user
header("Location: index.php");
}
次の2つのセッション変数について考えてみます。
$_SESSION['userid']=25;
$_SESSION['userName']='Super BuBu';
の出力はprint_r($_SESSION);
次のようになります。
Array ( [userid] => 25 [userName] => Super BuBu )
関数を呼び出した後killsession()
、出力は次のようになります。
Array ( );
この作業例を参照してください。print_r
およびsession
インタラクションによって実行された以前の出力とヘッダーが原因で、この環境でエラーが発生すると想定されます。