はじめに
$_SESSIONについて整理する。
$_SESSION
セッション経由で渡された情報
セッションの書き込み
セッション機能を使うには、あらかじめsession_start関数でセッションを開始しておく必要がある。
<?php
session_start();
$_SESSION['email'] = $_POST['email'];
セッションを破棄する
不要になったセッションは、サーバー負荷やセキュリティの観点から迅速に破棄する必要がある。
session_destroy関数はセッションを保存したファイルを削除するだけで、メモリ上のセッションは残ってしまう。
そのため、完全にセッションを削除するには以下のようなコードを書く。
session_destroy.php
<?php
session_start();
// セッション変数を空に
$_SESSION = [];
// セッションクッキー(ID受け渡しのためのクッキー)があれば破棄
if (isset($_COOKIE[session_name()])) {
$cparam = session_get_cookie_params();
setcookie(session_name(), '', time() - 3600,
$cparam['path'], $cparam['domain'],
$cparam['secure'], $cparam['httponly']);
}
// セッションを保存したファイルを削除
session_destroy();
セッション変数を空にする
↓
セッションクッキー(ID受け渡しのためのクッキー)を破棄する
クッキーを破棄するには過去の有効期限を設定する
↓
セッションを保存したファイルを削除する
のような順で処理する
クッキーとセッションの違い
クッキー
・データがクライアント側で管理される
・実データがネットワーク上を流れる
セッション
・データがサーバー側で管理される
・実データがネットワーク上を流れない
クッキーは、データがクライアント側で管理されるという性質上、「値がクライアント側で改竄/削除される可能性がある」「実データがネットワーク上で盗聴される可能性がある」などの問題を含んでいる。
しかしセッションでは実データがサーバー側で管理され、クライアント側ではセッションIDだけが渡されるので、上記の危険性を最小限に抑えることができる。