セッション更新時のデバッグ
開発時にセッション更新前後のデータを参照したい場合があると思います。
その際には.htaccessに以下の設定を記述することでセッション更新画面の前後でPHPを実行し、セッション内容を参照することができます。
設定 | 意味 |
php_value auto_prepend_file [PHPファイル名] | 対象PHP実行前に呼び出すPHPを指定する |
php_value auto_append_file [PHPファイル名] | 対象PHP実行後に呼び出すPHPを指定する |
サンプルでは以下のように記述してデバッグしました。
php_value auto_prepend_file output_session.php php_value auto_append_file output_session.php
<hr> <?php require_once 'Session.class.php'; $ss = & new Session(); var_dump ($_SESSION); ?> <hr>
セッション管理クラスを呼び出し、セッションを開始した後にセッション変数「$_SESSION」を参照してセッション内のすべてのキーと値を出力しています。ユーザー名を「鳩山」から「菅」に変更した場合の例が下図になります。
セッション更新の前後で「user_name」の値が変更されていることが分かります。
サンプルではパスワードも同時に変更しておりますが、実際のシステム開発ではパスワード変更前に現在のパスワードでの認証画面を設ける等の対応を行うべきです。
ログイン / 未ログインの状態に応じてコンテンツを出し分ける例
image.php内でセッションよりログイン、未ログインの状態を判断して画像を出し分けています。
// セッションクラス $ss = & new Session(); // ログインしている場合 if($ss->isLogin()){ header('Content-Type: image/gif'); readfile('images/member.gif'); } // 未ログインの場合 else{ header('Content-Type: image/gif'); readfile('images/non_member.gif'); }
index.php内でimage.phpをimgタグで呼び出す際にはsession.use_trans_sidパラメータによるセッション引数の自動付加が行われませんのでセッション管理クラスのメソッドを使って以下のように明示的に記述します。
$smarty->assign("SessionName", $ss->getSessionName()); $smarty->assign("SessionId", $ss->getSessionId());
<img src="image.php?{$SessionName}={$SessionId}" />
ログイン、未ログイン時にindex.phpにアクセスすると以下のように画像が表示されます。
セッションを利用するとimage.phpのようにPHP内部でアクセスされた時点での状態を判断してコンテンツを出し分けることができます。
ヘッダを指定することで画像だけでなく、FLASHやデコメール素材等の出力も可能です。
ログアウト
ログアウトする場合はセッション管理クラスのセッション破棄メソッドを使ってセッションを破棄しています。
// セッションクラス $ss = & new Session(); // セッションの破棄 $ss->destroy();
logout.php内の「トップ」リンクからindex.phpに遷移すると、前項のimage.phpにより未ログインの場合の画像が表示され、セッション上のユーザーデータがなくなっていることが分かります。
まとめ
session.use_trans_sidパラメータを利用するとクッキーを利用できない携帯電話ブラウザでもセッションを利用でき、プログラム内で特に意識しなくてもセッションを各画面で利用することができます。
セッション管理ライブラリHTTP_Session2を利用するとPHPのセッション関連の関数を意識して記述することなく、メソッドの呼び出しのみで比較的容易にセッションを利用したシステムを開発できます。
最近増えている携帯向けゲームサイトやコミュニケーションサイトの構築に役に立つのではないでしょうか。