PHP > Tips > PEAR HTTP_Sessionを利用してDBを用いたセッション管理

2006年03月10日

PEAR HTTP_SessionでDBを使用する際のメモ。

使用バージョン

HTTP_Session-0.5.1

依存パッケージ

DBでセッション管理を行う場合は バージョン1.7.6以降のPEAR DBが必要。

セッションテーブルの準備

ダウンロードした圧縮ファイルを解凍後 HTTP_Session-0.5.1/docs/sessiondata.sqlに書かれたSQL文を使用して DBにテーブルを作成する。
MySQLの場合はそのまま使用できる。 他のDBの場合は書き換える必要があると思う。

インストール

include_pathが通ってる場所、 もしくはHTTP_Sessionを使用するスクリプトと同じディレクトリにHTTPフォルダを用意。 作成したHTTPディレクトリにHTTP_Session-0.5.1以下のファイルをコピーする。
ただし、docsディレクトリは必要ない。 ファイル階層は以下のようになる。
HTTP/Session.php
HTTP/Session/Container.php
HTTP/Session/Container/DB.php
HTTP/Session/Container/MDB.php
HTTP/Session/Container/MDB2.php

使用方法

まずはincludeする。

require_once 'HTTP/Session.php';

セッションコンテナの生成

//mysqlのDSN
$dsn = 'mysql://root:password@localhost/test';

/**
先にDBに接続しておきたい場合
require_once 'DB.php';
$db =& DB::connect('mysql://root:password@localhost/test');
$dsn =& $db;
*/

/**
第一引数には'DB'を指定、
第二引数にはオプションを配列で指定。
オプションの詳細
・'dsn'にはDSNを指定した文字列、もしくはPEAR DBのオブジェクト。
・'table'にはDBのセッション管理を行うテーブル名、
  sessiondata.sqlをそのまま使用していれば'sessiondata'になる。
・'autooptimize'にはテーブルの最適化を自動で行うかをbooleanで指定。
  テーブル最適化はガベージコレクトが呼ばれ度に実行される。
*/
HTTP_Session::setContainer('DB', array('dsn'   => $dsn,
                                       'table' => 'sessiondata'
                                       'autooptimize' => false));

セッション開始する前に行う設定

//TransSIDを使用するならtrue、使わないならfalse
HTTP_Session::useTransSID(false);

//クッキーを使用するならtrue、使用しないならfalse
HTTP_Session::useCookies(true);

セッション開始

/**
第一引数にはセッション名、デフォルトは'SessionID'
第二引数にはセッションIDを指定する、
省略すれば自動でランダムな文字列が指定される
両方省略しても問題ない
*/
HTTP_Session::start('sessionID',uniqid('MyID'));

セッションの有効期限の指定
セッション開始後に指定しなければならないみたい。 引数にはUNIXタイムスタンプを指定する

/**
セッションの最終的な有効期限の指定
一度設定すると変更出来ない
*/
HTTP_Session::setExpire(time() + 60*60);

/**
セッションの一時的な有効期限の指定
一時的な有効期限は更新出来るので、
一定時間何もしなければ自動的にセッション切断
という処理に利用する。
*/
HTTP_Session::setIdle(time() + 60*10);

あとはHTTP_Sessionのメソッドを利用して、 セッション変数の登録・削除、 セッションの破棄等を行う。
HTTP_Session-0.5.1/docs/のサンプルが書かれてるので 大体の使い方はそれを見れば分かると思う。 よく使われると思うメソッドは次の項目に記す。

主なメソッド

clear()

セッション変数をすべて破棄する。 ただし、HTTP_Sessionの内部で使用されている'__HTTP_Session_Info'は削除されない。

destroy()

セッションを破棄する

get(string $name, [mixed $default = null] )

$_SESSIONから第一引数に指定した名前の値を取得する。 第二引数にデフォルトの値を指定することで、
$_SESSIONに指定した変数が存在しない場合に $_SESSIONに第一引数で指定した名前でデフォルト値を 定義した上で、デフォルト値を返してくれる。

set( string $name, mixed $value)

$_SESSIONに第一引数で指定した名前と第二引数で指定した値を定義する。 第二引数にNULLを指定すれば、$_SESSIONから第一引数の名前の値を削除する。 返り値は新しく値を定義する前の値が返ってくる。

isExpired()

setExpire()で指定した有効期限が切れてるかどうかを返す。 有効期限が切れていればtrue、切れてなければfalseを返す。

isIdle()

setIdle()で指定した有効期限が切れているかどうかを返す。 有効期限が切れていればtrue、切れてなければfalseを返す。

updateIdle()

現在の時間を元にsetIdle()指定した有効期限を伸ばす。

isNew()

新しいセッションかどうかを返す。 新しいセッションであればtrue、継続してるセッションであればfalseを返す。

posted by 37to at : 15:14 | コメント (0) | トラックバック (0)

コメント

この記事に対するコメントはまだありません。


投稿する

投稿者情報を保存しますか?


トラックバック

トラックバックURI


一覧

この記事に対するトラックバックはまだありません。