Sabelでは $_SESSION 変数は使用せず、セッションの利用はセッションオブジェクトを通して行います($_SESSION を使用してはいけないということではありません)。データの保存先(バックエンド)として、ファイル、データベース、Memcachedサーバ が選択できます。バックエンドの選択に関しては
こちらを参照してください。
標準のセッションオブジェクトは
Sabel_Session_PHP で、このオブジェクトはPHPのセッション機構をラップした単純なものです。つまり、セッションデータはファイルに保存されます。
$session = Sabel_Session_PHP::create();
下記はセッションに格納し、取り出し、削除するコード例です。delete()メソッドの戻り値は削除された値となります。
$session->write("id", 1);
echo $session->read("id"); // 1
echo $session->delete("id"); // 1
echo $session->read("id"); // NULL
セッションデータを全て削除するにはdestory()メソッドを使用します。
※Cookie上のセッションIDは削除しないことに注意してください。
$session->destory();
CookieからセッションIDを削除するには、Cookieオブジェクトを使用し、下記のようにします。
Sabel_Cookie_Factory::create()->delete($session->getName());
コントローラ(アクション)内ではセッションオブジェクトに
$this->session でアクセスできます。また、プロセッサ内では execute()メソッド に渡ってくる
$bus(バスオブジェクト)から取得できます。
class Index_Controllers_MyController extends Sabel_Controller_Page
{
public function myAction()
{
$userId = $this->session->read("user_id");
}
}
class Processor_MyProcessor extends Sabel_Bus_Processor
{
public function execute(Sabel_Bus $bus)
{
$session = $bus->get("session");
}
}
どうしてもグローバルなアクセスが必要な場合は、コンテキストからバスを取得し、そこから取得することができます。
$session = Sabel_Context::getContext()->getBus()->get("session");
セッションクラスはSabel_Sessionインターフェイスを実装しています。インターフェイスは下記のように定義されています。
- public void start()
- セッションを開始します。
- public boolean isStarted()
- セッションが開始されている場合にtrueを返します。
- public string getName()
- cookieに使用するセッション名を返します。
- public void setId()
- セッションIDをセットします。
- public string getId()
- セッションIDを返します。
- public void regeneratedId()
- セッションIDを生成し、変更します。
- public boolean has(string $key)
- セッションデータに$keyがあればtrueを返します。
- public mixed read(string $key)
- セッションデータから$keyの値を返します。
- public void write(string $key, mixed $value, int $timeout = 0)
- セッションデータに$keyで$valueを書き込みます。$timeoutはデータの有効期間(秒)です。
- public mixed delete(string $key)
- セッションデータから$keyの値を削除し、$keyの値を返します。
- public array destroy()
- セッションデータを全て削除し、削除された全てのデータを返します。
- public string getClientId()
- セッションIDとは別のランダムなIDを返します。この値は regeneratedId() を実行しても変更されません。
- public boolean isCookieEnabled()
- クライアントがクッキーが有効な場合にtrueを返します。(初回リクエスト時は判断できない場合があります)
- public array getTimeouts()
- そのリクエストでタイムアウトとなったデータを返します。