BEARのセッションはPEAR::HTTP_Session2()を利用しています。ページにインジェクトして使います。
キー | 型 | 意味 | 必須? | デフォルト |
---|---|---|---|---|
adapter | mixed | アダプター | 1 | |
prefix | string | セッションキープリフィックス | null | |
path | string | path: dsn | session file path | memcache host(s) |
idle | int | アイドル時間 | ||
callback | string | idleタイムアウトコールバック | ||
expire | int | エクスパイア時間 | 0 | |
expire_callback | string | expireタイムアウトコールバック | ||
gc_max_lifetime | int | GCが実行されない最大時間 |
※ アダプター 0 なし | 1 File | 2 DB | 3 memchache
App.phpでセッションエンジンを選択します。memchaced, DB, fileセッションが使用できます。※fileセッションではwebの分散化が利用できません。基本機能は以下の通りです。
$this->_session = BEAR::dependency('BEAR_Session');
//読み込み 2番目の引数がキーが存在しない場合のデフォルト値です
$name = $this->_session->get('user_name', '名無し');
//書き込み
$this->_session->set('cart', $cart);
//消去
$this->_session->unregister('cart');
その他のHTTP_Session2の機能が利用できます。時間が経ってパスワードの入力を再度 求めたりする機能が実装できます。
セッションタイムアウトは2種類あります。セッション開始から最後の操作からの時間がカウントされるidleと、セッション開始してからの時間がカウントされるexpireです
最後のweb閲覧から一定時間たったらセッション切れが通知されるオプションです。idleでは時間を設定してcallbackでアイドル時間が切れた時にコールバックされるメソッド名を指定します。例えば10分アクセスが行われないApp_Session::onSessionTimeout()
をコールするときは以下のように設定します。
BEAR_Session
idle: 3600
callback:
- 'App_Session'
- 'onSessionTimeout'
App_Page::onSessionTimeout()
内ではセッションタイムアウトを知らせたり、再ログインを受け付けるフォームを表示したりします。※以下のように明示的に破壊するか、expireで指定した時間がこない限りセッションデータは破壊されません。
BEAR::dependency('BEAR_Session')->destory();
コールバック先ではセッションを破棄して無効にするか、延長して使用を続けるかを記述することができます。コールバックを指定していないとセッションは破棄されます。
セッション開始してからセッションタイムアウトはexpireで指定します。expire_callbackオプションが指定されてないとこの時間のたったセッションは破棄されます。
BEAR_Session
expire: 36000
class App_Session extends BEAR_Base
{
public function onInject()
{
//現在のページ
$this->_page = $this->_config['page'];
$this->_session = BEAR::dependency('BEAR_Session');
}
public function onSessionTimeOut()
{
// 延長
$this->_session->updateIdle();
// または破壊
// $this->_session->destroy();
//セッションタイムアウト画面
$this->_page->display('/session/timeout.tpl');
$this->_page->end();
}
}
DBセッションを利用する場合、デフォルトで以下のテーブルを作成する必要があります。
CREATE TABLE `sessiondata` (
`id` varchar(32) NOT NULL,
`expiry` int(10) default NULL,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=innodb DEFAULT CHARSET=utf8;
```CREATE TABLE `sessiondata` (
`id` varchar(32) NOT NULL,
`expiry` int(10) default NULL,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=innodb DEFAULT CHARSET=utf8;
}}}```