セッションの使用 | Session

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()
そのリクエストでタイムアウトとなったデータを返します。