[FuelPHP]セッションをクッキーからファイルやDBに変更する

Posted 2012年2月10日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

CSRF対策についてはこちらの記事が良いかもしれません。

PHPには標準で $_SESSIONが用意されていますが、FuelPHPにもセッション管理用に
Sessionクラスが用意されています。

セッションの書き込みには Session::set() を使います。
名前と内容のペアを渡すだけなので簡単です。

Session::set( 'name', 'hogehoge' );
Session::set( 'characters', array( 'haruka', 'chihaya', 'miki', 'yayoi' ) );

2行目のように、オブジェクトを渡すこともできます。
連想配列や、多次元配列でも可能です。

取り出すには Session::get() を使います。

$name = Session::get( 'name' );
$characters = Session::get( 'characters' );
$all_sessions = Session::get();
$nodata = Session::get( 'no_exists', 'hogehoge' );

3行目:引数がない場合は全てのセッションデータを取得する。
4行目:セッションが存在しない場合の初期値を指定。

削除は Session::delete( 'name' ); という感じで行います。

一度きりのセッション

set_flash()、get_flash()
というメソッドもあります。
set() で作ったセッションはしばらく残りますが、
set_flash() で作ったものは一度使うと消えるようです。

Session::set_flash( 'name', 'azunyan' );
$name = Session::get_flash( 'name' );
Session::delete_flash( 'name' );

set()、get()、delete()と使い方は同じですね。

セッションをファイルに保存する

今回はこちらの記事を参考にさせていただきました。
というかほぼそのままです。

初期状態ではセッション情報をクッキーに保存しているので、ファイルに書き出すようにします。

fuel/core/config/session.php を fuel/app/config/session.php にコピーします。
エディタで下記のように編集します。

'driver'  => 'file',

ファイルの保存場所が「/tmp」になっていますが、自分は Windows環境でテストしたいので
FuelPHP管理下のフォルダに作ることにします。

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

セッションをDBに保存する

設定ファイル session.php の下記部分を「db」に修正します。

'driver'  => 'db',

dbにセッション専用のテーブルを作成します。
下記SQLで作成できるようです。

CREATE TABLE IF NOT EXISTS `sessions` (
`session_id` varchar(40) NOT NULL,
`previous_id` varchar(40) NOT NULL,
`user_agent` text NOT NULL,
`ip_hash` char(32) NOT NULL DEFAULT '',
`created` int(10) unsigned NOT NULL DEFAULT '0',
`updated` int(10) unsigned NOT NULL DEFAULT '0',
`payload` longtext NOT NULL,
PRIMARY KEY (`session_id`),
UNIQUE KEY `PREVIOUS` (`previous_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

ドキュメントによるとメモリキャッシュに書き出すこともできるみたいですね

関連する記事

No Comments »

No comments yet.

Leave a comment

カテゴリー