デフォルトのセッションオブジェクトは Sabel_Session_PHP であり、これはPHP標準のセッション機構をラップしたものです。つまり、セッションデータはファイルに保存されることとなります。
しかしWebサーバが複数台から構成される場合など、MemcachedサーバやDatabaseサーバにセッションデータを格納したいことがあるかもしれません。Sabelではそのために、Sabel_Session_Memcache や Sabel_Session_Database クラスを提供します。
セッションオブジェクトはSessionプロセッサ内で生成され、バスに乗せられます。
<?php
class Processor_Session extends Sabel_Bus_Processor
{
public function execute(Sabel_Bus $bus)
{
if (!$bus->has("session")) {
$bus->set("session", Sabel_Session_PHP::create());
}
}
public function shutdown(Sabel_Bus $bus)
{
...
}
}
上記のSabel_Session_PHP::create()の部分を変更することで、セッションデータの保存先を変更することができます。
Memcache
バックエンドをMemcachedサーバとする場合は
Sabel_Session_Memcacheクラス を使用します。create()メソッドの第1引数はホスト名(またはIPアドレス)、第2引数はポート番号となります。第1引数を省略した場合は
localhost が、第2引数を省略した場合は
11211 が使用されます。
$session = Sabel_Session_Memcache::create("memd.example.com", 22122);
データベース
バックエンドをデータベースとする場合は
Sabel_Session_Databaseクラス を使用します。create()メソッドにはセッションデータを保持するモデル名を渡します。省略時は "SblSession" です。
$session = Sabel_Session_Database::create("MySessionModel");
バックエンドにデータベースを選択した場合は、セッションデータを格納するためのデータベース(テーブル)が必要となります。そのテーブルを作成するためのマイグレーションファイルが
migration/system/N_SblSession_create.php にあるので、それを適切なマイグレーションファイル番号でコピーしてください。例えば現在5番までのマイグレーションファイルが存在するなら、下記のようにファイルをコピーします。
$ cd /path/to/project
$ cp migration/system/N_SblSession_create.php migration/default/6_SblSession_create.php
$ sakle Migration development head
マイグレーションファイルに関しては
こちらを、マイグレーションの実行に関しては
こちらを参照してください。
アプリケーションで使用するデータベースとセッション用データベースが異なる場合があるかもしれません。例えばセッション用データベースのコネクションネームがsesdbだとした場合、まずsesdb用の接続設定を追加します。
$params = array(
"default" => array(
...
),
"sesdb" => array( // <- sesdb用の設定を追加
...
)
);
コネクションネームが "sesdb" なのでコピー先も sesdbディレクトリ となります。
$ cd /path/to/project
$ mkdir migration/sesdb
$ cp migration/system/N_SblSession_create.php migration/sesdb/1_SblSession_create.php
$ sakle Migration development head sesdb
そして、モデルがセッション用データベースへ接続するために、コネクションネームの設定を行います。
app/models/SblSession.php
class SblSession extends Sabel_Db_Model
{
protected $connectionName = "sesdb";
}
全てのセッションオブジェクトは
Sabel_Session_Interface を実装しているため、セッションオブジェクトを
変更したからといって使用方法が変わることはありません。インターフェイスに関しては
前章を参照してください。
関連項目