セッション管理クラスの作成
PHPのセッション関数をそのまま書いていくとコードが煩雑になりがちです。
PHPのセッション管理機能を包括するライブラリにHTTP_Session、HTTP_Session2というライブラリがあります。
HTTP_Session2ライブラリはHTTP_Sessionライブラリの後継にあたるPHP5向けのライブラリで、session_* 系の関数へのオブジェクト指向的なインターフェイスを持ち、データベースをコンテナに利用(後述)したり有効期限やアイドル時間を設定できる機能を持っています。
本サンプルではこのHTTP_Session2を利用してセッション管理クラスを作成します。
セッション管理ライブラリHTTP_Session2の主なメソッドは以下のとおりです。
メソッド名 | 意味 |
start() | セッションを開始する |
id() | セッションIDの値を参照する |
name(string $name) | セッションIDの名前を設定する $name指定がない場合は「SessionID」がセッションID名となる |
set( string $name, mixed $value ) | セッションに$name, $valueのペアで名前と値を設定する |
setExpire( 秒数 ) | セッションの有効期間を設定する |
setIdle( 秒数 ) | セッションのアイドル時間を設定する |
setContainer( string $container, [array $container_options = null]) | セッションのデータをデータベースに保存する(後述) |
useCookies( true / false ) | クッキーを使用する / 使用しない |
useTransSID( true / false ) | session.use_trans_sidパラメータを使用する / 使用しない デフォルトが「true」 |
regenerateId( true / false ) | 古いセッション情報を破棄して / 破棄せずに セッションIDを再生成する デフォルトが「false」ry |
HTTP_Session2ではセッションをDBに保存する機能があります。
保存するDBの形式を「コンテナ」といい、String型の変数で指定します。さらにその際のDSN設定やテーブル名などを「コンテナオプション」として配列で指定します。
コンテナの種類にはDB、MDBがあります。
本記事ではこの機能は利用しませんので、詳しくはPEARの解説ページを参照してください。
HTTP_Session2を使って、各画面から呼び出すセッションを管理するクラスをSessionの名前で作成します。
具体的にはコンストラクタの部分でconfig.phpの読み込みとHTTP_Session2の初期設定、セッションの開始を行い、ログイン後にセッションにデータを置くメソッド、他HTTP_Session2のメソッドを利用してセッションの取得、セッションの破棄のメソッドを作成します。
/** * コンストラクタ */ function Session(){ // 設定ファイル読み込み include('config.php'); //クッキーを使用しない HTTP_Session2::useCookies(false); // セッション開始 HTTP_Session2::start(); } /** * ログイン */ function login($user_id, $password){ $pdo = new PDO(dbType.":host=".MYSQL_HOST."; dbname=".MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD); $stmt = $pdo->prepare("SELECT id, user_id, user_name, uid FROM user where user_id = ? AND password = ?"); $stmt->execute(array($user_id, md5(str . $password))); $rowCount = $stmt->rowCount(); // userテーブルにデータが存在した場合はセッションに置く if($rowCount){ $row = $stmt->fetch(PDO::FETCH_ASSOC); HTTP_Session2::set('user', $row); } return $rowCount; } /** * かんたんログイン */ function easyLogin($uid){ # 端末IDをキーとしてloginメソッドと同様にユーザーデータを取得してセッションに置く } /** * セッション上のユーザー情報を返却 */ function getSession(){ return HTTP_Session2::get('user'); } /** * ログインしているか? */ function isLogin() { $_user = HTTP_Session2::get('user'); $return = (isset($_user['id'])) ? true : false; return $return; } /** * セッション破棄 */ function destroy(){ HTTP_Session2::destroy(); }
セッション内に「user」というキーでユーザーのデータを置いています。
ユーザーデータを取得する際には「user」のキーでセッションからデータを取得します。