Skip to content

Latest commit

 

History

History
114 lines (93 loc) · 4.37 KB

session.md

File metadata and controls

114 lines (93 loc) · 4.37 KB

導入

BEARのセッションはPEAR::HTTP_Session2()を利用しています。ページにインジェクトして使います。

$config

キー 意味  必須? デフォルト
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です

idle

最後の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で指定します。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セッション

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;
}}}```