アプリケーション作成に不可欠なセッション変数ですが、セッションを 正しく消さなければ不具合の原因のみならず、脆弱なアプリケーション となってしまいます。
正しくセッションを消す方法を知っておきましょう。
PHPアプリケーションを作成する時に、セッション変数の利用は不可欠と言っ ても過言ではないでしょう。
しかしセッションには攻撃所が多く、脆弱なアプリケーションを多数見かけ ます。
session_regenerate_id( true ) としてセッションIDを変えるのは非常に 有効な手段ですが、逆に不要なセッションは必ず破棄しなければ後々、脆弱 性や不具合の原因となります。
例えばログアウトメカニズムのような実装をする場合、session_destroy()を 利用していませんでしょうか?
session_destroy()は実際にセッションファイルを削除しているのですが、メ モリ内の$_SESSION変数は残り続けてしまいます。 以下のような検証コードを実行し、出力結果をご覧ください。
<?php
session_start();
$_SESSION['login'] = 'login';
session_destroy();
print_r($_SESSION);
?>
これでセッション変数が残っている事が確認できます。
(※session_regenerate_id()をした場合、PHP5.1.2では否応無しにセッション 破棄に失敗してWarningが出る)
正しくログアウト(セッション変数を全て破棄)するにはメモリ内のセッション 変数をarray()関数で初期化しましょう。
$_SESSION = array();
session_destroy();
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。