セッション変数の削除とセッションIDの削除

広告

保存されたセッション変数を削除することもできます。「unset」関数を使います。

unset
void unset ( mixed var [, mixed var [, mixed ...]] )
unset()は指定した変数を破棄します。

パラメータ:
  var  削除したい変数

具体的には下記のように記述します。

unset($_SESSION("visited"));

また全てのセッション変数を削除するためには下記のように空の配列を「$_SESSION」変数に格納します。

$_SESSION = array();

※「$_SESSION」変数そのものを削除しないようにして下さい。

次に、例えばログアウトの処理などをしてセッションそのものを破棄したい場合です。この場合はクライアント側に保存されているセッションIDを削除した後で、セッションを破棄します。

クライアント側にはクッキーで保存されていますのでクッキーを削除します。(クッキーの削除については『クッキーを削除する』を参照して下さい)。

if (isset($_COOKIE["PHPSESSID"])) {
    setcookie("PHPSESSID", '', time() - 1800, '/');
}

最後にセッションに登録されたデータを全て破棄します。「session_destroy」関数を使います。

session_destroy
bool session_destroy(void)
session_destroy()は、現在のセッションに 関連づけられた全てのデータを破棄
します。この関数は、セッションに関するグローバル変数を破棄しません。また、
セッションクッキーを破棄しません。

戻り値:
  成功した場合に TRUE を、失敗した場合に FALSE を返します。

次のように使います。

session_destroy();
サンプルコード

では実際に試してみます。

<?php
    session_start();
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

    if (!isset($_SESSION["visited"])){
        print('初回の訪問です。セッションを開始します。');

        $_SESSION["visited"] = 1;
        $_SESSION["date"] = date('c');
    }else{
        $visited = $_SESSION["visited"];
        $visited++;

        print('訪問回数は'.$_SESSION["visited"].'です。<br>');

        $_SESSION["visited"] = $visited;

        if (isset($_SESSION["date"])){
            print('前回の訪問日時は'.$_SESSION["date"].'です。<br>');
        }

        $_SESSION["date"] = date('c');
    }

?>

<p>
<a href="./sessiontest3_2.php">ログアウトする</a>
</p>

</body>
</html>
<?php
    session_start();
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php
    print('セッション変数の一覧を表示します。<br>');
    print_r($_SESSION);
    print('<br>');

    print('セッションIDを表示します。<br>');
    print($_COOKIE["PHPSESSID"].'<br>');

    print('<p>ログアウトします</p>');

    $_SESSION = array();

    if (isset($_COOKIE["PHPSESSID"])) {
        setcookie("PHPSESSID", '', time() - 1800, '/');
    }

    session_destroy();
?>

<p>
<a href="./sessiontest3_3.php">ログアウトの確認</a>
</p>

</body>
</html>
<?php
    session_start();
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php
    print('セッション変数の確認をします。<br>');
    if (!isset($_SESSION["visited"])){
        print('セッション変数visitedは登録されていません。<br>');
    }else{
        print($_SESSION["visited"].'<br>');
    }

    print('セッションIDの確認をします。<br>');
    if (!isset($_COOKIE["PHPSESSID"])){
        print('セッションは登録されていません。<br>');
    }else{
        print($_COOKIE["PHPSESSID"].'<br>');
    }
?>

</body>
</html>

上記ファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。(適当に数度再読み込みしたものです)。

セッションの削除

ログアウトへのリンクをクリックします。

セッションの削除

このページでログアウトの処理をしています。クッキーの値は削除した後で再度クライアントからアクセスしてもらわないと削除されたかどうか確認できないため、ログアウトを確認するためのページをもう一つ用意してあります。

セッションの削除

上記のようにセッション変数も、クライアント側に保存されていたセッションIDも削除されたことが確認できます。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。