FuelPHPのセッション
FuelPHP
フレームワークが備えている定番、かつ、個人的には最も便利な機能と言っても良いと思うセッション機能。
当然、FuelPHP でも備わっています。
FuelPHP でセッションを使うときのメモです。
セッションの設定
条件が合致していればいきなり使うことも出来るのですが、まずは設定回りを確認してからにしましょう。
思わぬところではまることもあるので。。。
まず、fuel/core/config/session.php にある設定ファイルを fuel/app/config にコピーしましょう。
もちろん、デフォルトのままでOKという場合には不要です。
以下、設定の概要です。
適宜必要なものは変更してください。
項目 | 概要 |
---|---|
auto_initialize | 自動的に初期化してロードするか否か。デフォルトで自動なので通常はこのまま。 |
driver | ドライバーの設定。cookie/file/db/memcached/redis を指定可能。(後述) |
match_ip | クライアント IP が変わった時にセッションを破棄するか否か。デフォルト false なので通常はこのまま。 |
match_ua | クライアント UA が変わった時にセッションを破棄するか否か。デフォルト true なので通常このまま。 |
cookie_domain cookie_path cookie_http_only | セッションに使う Cookie 設定。通常は特に変更不要。 |
encrypt_cookie | セッションに使用する Cookie を暗号化するか否か。デフォルト true なので通常このまま。 |
expire_on_close | ブラウザを閉じたらセッションを破棄するか否か。デフォルト false。用途により要設定。 |
expiration_time | 上記で破棄されない場合の有効期限。 |
rotation_time | セッションハイジャックを防ぐためのセッション ID の自動変更間隔。false を設定すると自動変更されなくなります。 |
flash_id | フラッシュセッションの識別子。通常は変更不要。 |
flash_auto_expire | 次リクエスト時にフラッシュセッションを自動的に削除するか否か。デフォルト true なので通常このまま。 |
その他まだまだありますが、ほとんどのものは変更不要です。
セッションドライバ
上記のドライバ設定で、デフォルトは cookie となっています。
が、cookie はサイズの問題で想定と異なる動作をすることがありますので、ある程度のサイズのセッションを使いそうであれば、cookie 以外のドライバにしておいた方が無難です。
最初に決められないようであれば、とりあえず file にしておくのも良いと思います。
ドライバを変更した際には、config/session.php の下方にあるドライバごとの設定も確認し、必要であれば変更しましょう。
暗号化の設定
FuelPHP のセッション機能は内部的に暗号化クラスである Crypt クラスを使用します。
従って、Crypt の設定も行っておく必要があります。
Crypt の初回使用時に、app/config/crypt.php が自動的に生成されますので、このファイルが作成できるよう権限を与えておく必要があります。
もしくは、上記ファイルを手動で作成します。
内容は、下記のようなファイルになります。
<?php return array( 'crypto_key' => 'xxxxxxxxxxxxxxxxxxxxxxxx', 'crypto_iv' => 'yyyyyyyyyyyyyyyyyyyyyyyy', 'crypto_hmac' => 'zzzzzzzzzzzzzzzzzzzzzzzz', ); ?>
マニュアルによると、
もしキーを手入力で指定する場合、キーはbase64エンコードした文字列で、デコードするために長さは4の倍数でなければなりません。
必ず正しい長さになるよう指定してください!
とのことです。
ちなみに、Crypt の設定がうまくいってないと、以下のようなエラーが出ることがあります。
The requested view could not be found: errors/crypt_keys.tpl
ただ、errors/crypt_keys.tpl というファイルは実際見つからないので、このエラーは謎です。。。。消えちゃった??
使い方
使い方は至って簡単です。
セッションに保存。
Session::set('xxxx', array('item1' => $item1, 'item2' => $item2));
セッションから取得。
$item = Session::get('xxxx');
上記の通常のセッションとは別に、フラッシュセッションと呼ばれるものがあります。
これは、セッションに保存後一度だけ参照することが出来るというものです。
例えば何かの処理後にメッセージを表示するためだけにセッションを使用する時などは、いちいちセッションを削除しなくて良いのでなかなか便利です。
フラッシュセッションも下記のように通常のセッションと同じように使えます。
保存。
Session::set_flash('xxxx', array('item1' => $item1, 'item2' => $item2));
取得。
$item = Session::get_flash('xxxx');