11月 042012
 

FuelPHPのSessionクラスについてまとめてみた。

こんにちは。ファガイです。本日は、FuelPHPのSessionクラスについてまとめます。

基本(通常のセッションの読み書き)

set()メソッド

セッションにセットするメソッドです。

set()
第1引数:セッション変数名
第2引数:値(配列も可)

//文字列を渡す
Session::set('userid', 'fagai');
//配列を渡す
Session::set('login', array('user'=>$userid, 'hash'=>$login_hash));

get()メソッド

セッションからゲットするメソッドです。第1引数に何も指定しない場合はsessionをすべて取得することが出来ます(連想配列)。指定した変数に何も入って無い場合はnullが返されます。

get()
第1引数:セットされているセッションデータの変数名

//セッションデータ取得
$userid = Session::get('userid');
//SessionAuthのログイン情報取得
$username = Session::get('username');
$login_hash = Session::get('login_hash');

一時的なセッションの作成(フラッシュセッション)

一時的なセッション(フラッシュセッション)とは、次のリクエスト時に自動的に削除されるセッションのことです。例えば、ログインしたら「ログインしました。」等を表示するとか。フォーム送信時にチケットを保持するとか。(Csrf対策)
フラッシュセッションは、他のセッションデータを衝突しないように別の名前空間で管理がされています。(Config/Session.phpのflash_id参考)

set_flash(),get_flash()メソッド

フラッシュセッションを読み書きするメソッドです。引数はset()、get()メソッドと同様になります。

keep_flash()メソッド

フラッシュセッションの寿命を次のリクエストまで延ばします。

keep_flash()
第1引数:フラッシュセッションの伸ばしたい変数名

セッションの削除、破棄

セッションの変数を削除する場合には、delete()及びdelete_flash()を使用します。普通のセッションデータであればdelete()メソッド。フラッシュセッションであればdelete_flash()メソッドを使います。

Session::delete('userid');
Session::delete_flash('ticket');

セッション自体を破棄するには、Session::destroy()で破棄出来ます。

セッションIDの変更、取得

セッションIDはSessionクラスの設定で自動的に変更がされますが、明示的に行いたい時にはSession::rotate()メソッドを使用します。

Session::rotate();

セッションIDを取得したい時にはSession::key()を使います。

$sess_id = Session::key();

Sessionクラスの設定

Sessionクラスの設定は、Core/Config/session.phpにあります。APPPATH/Config/session.phpにコピーして使いましょう。

return array(
    'auto_initialize'    => true,
    'driver'        => 'cookie',
    'match_ip'        => false,
    'match_ua'        => true,
    'cookie_domain'     => '',
    'cookie_path'        => '/',
    'cookie_http_only'    => null,
    'expire_on_close'    => false,
    'expiration_time'    => 7200,
    'rotation_time'        => 300,
    'flash_id'        => 'flash',
    'flash_auto_expire'    => true,
    'post_cookie_name'    => '',

    'cookie'    => array(
        'cookie_name'=> 'fuelcid',
    ),

    'file'    => array(
        'cookie_name'        => 'fuelfid',
        'path'            => '/tmp',
        'gc_probability'    => 5
    ),

    'memcached'    => array(
        'cookie_name'=> 'fuelmid',
        'servers'    => array(    
          'default' => array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100)
      ),
    ),

    'db'     => array(
        'cookie_name'   => 'fueldid',    
        'database'      => null,
        'table'         => 'sessions',
        'gc_probability'    => 5
    ),

    'redis'    => array(
        'cookie_name'        => 'fuelrid',
        'database'            => 'default'
    )
);

以下にまとめています。

項目名 説明
auto_initialize 自動的に初期化して読み込むかどうか
driver ドライバーの設定。cookie,file,db,memcached,redisが指定可能。
match_ip クライアントのipが変わった時にセッションを破棄するかどうか
match_ua クライアントのUAが変わった時にセッションを破棄するかどうか
cookie_domain セッションに使うCookieのドメイン属性指定
cookie_path セッションに使うCookieのpath属性指定
cookie_http_only セッションに使うCookieのhttp_only属性指定
expire_on_close ブラウザを閉じたらCookieも削除するかどうか
expiration_time expire_on_closeがfalseなら有効期限を秒数で指定
rotation_time セッションIDの自動変更周期の秒数設定
flash_id フラッシュセッションの識別子指定
flash_auto_expire 次のhttpリクエスト読み込み時にflashが読み込まれなくてもフラッシュセッションを削除。falseなら読み込まない限り削除されない。
post_cookie_name セッションCookieが送られなかった時にPOSTデータで受け取った変数へセッション情報をコピーする場合は、その変数名を指定

この項目以降の内容ですが、ドライバにその項目を指定した際の設定項目になっています。こちらは、どうにか読めなくもないレベルでしたので省略。一つ言っておくと、gc_probabilityはガーベッジコレクションの確率らしいです。(デフォルトだと100回に5回起こる)

注意

ドライバにCookieを指定した時、セッション情報はすべて暗号化されてCookieに埋め込まれます。ただし、Cookieのサイズが4KBを超えるとエラーになるため、情報量が多い時には他のドライバーを使う。

こんな所です。参考書籍はFuelPHP入門です。参考になる。

Pocket

 Posted by at 9:38 PM

Sorry, the comment form is closed at this time.