アプリケーション作成に不可欠なセッション変数ですが、セッションを 正しく消さなければ不具合の原因のみならず、脆弱なアプリケーション となってしまいます。

正しくセッションを消す方法を知っておきましょう。

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開発者をサポートする情報を掲載しています。