Fuelphpのデフォルトセッション管理方法はクッキーです。これをファイルやDBに変更する方法です。
昨日のことです。既に前記事で紹介したやり方と、ほとんど同じコードを利用して、自分のためのサイトを作っているのですが、突然セッションのクッキーが4KBを超えるから保存できない、別の保存方法を使えとエラーメッセージが出て、止まってしまいました。
一度、テスト済みのコードなので、組み込む時点でいじった他の部分のコードを一生懸命チェックしたが、わからず、3時間色々試した挙句、エラーメッセージに従って、セッションの保管方法を変更することにしました。
それで解決しました。初めから、メッセージに従えばよかったのですが、動いているコードを信用し、自分が直前に入れたコードに原因があるに違いないと、思い込んでいたのです。まあ、これは皆さん、頻繁に経験することでしょう。:)
たぶん、セッションにフラッシュデーターとして、バリデーションのエラーメッセージが書き込まれており、その他に100バイトほどの情報を書きこんでおいたものが、暗号化され4KBを超えてしまったということしょう。
実際に、3時間かかったのは、単純なDBの設定ミスもあり、両方の減少が重なっていたため、複雑に見えた為です。こうしたことを解消するのが、プログラムの楽しみ、もしくは苦しみですね。 :D
実際の保存方法を切り替える方法は、ドキュメントに説明されています。コンフィグファイルを変更するだけです。
1.core/config/session.phpをapp/configへコピーする。
2.コピーしたファイルをエディターで開き、修正する。
以上です。簡単です。'dirver' => 'cookie'を'file'か'db'へ変更します。その下に、それぞれのドライバーに対する設定を行なっている場所がありますので、必要に応じて変更します。
ファイルを使用する場合、セッションの保存場所が'/tmp'になっています。このままですと、エラーになります。この指定でapp下のtmpを見に行ってくれるのなら、仕様として納得ですが、どこかの/tmpに書き込みに行って、存在しないと叱られました。(ソースは追っていないため、どこかはわかりません。)
そこで、これを適当な保存場所へ変更しましょう。app/tmpがFuelphpによって用意されますが、これを利用する場合は、APPPATH . '/tmp'と指定しましょう。
ドライバーとして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;
| Fuelではまった、存在しないcssやjsとbefore,after関数< 前 | 次 >Fuelphpのパッケージを理解するためにTinyMCEを導入 |
|---|
| < 前 | 次 > |
|---|