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入門です。参考になる。