FuelPHPのセッションにはまる

FuelPHPのセッションにはまる

FuelPHPを利用して、ちょっとしたアプリを作ろうとした際にセッション(memcached)ではまりました。


今回の環境や構成は下記のとおりです。

構成・環境

  • nginx + php-fpm
  • php 5.4
  • memcached 1.4(セッションで利用)
  • FuelPHP 1.6

処理概要

  1. 1~N個の値を設定しPOSTする
  2. 設定された値をセッションに入れ、確認画面を表示する
  3. セッションから設定された値を取り出し、DBへ入れる

実際の処理は微妙に違いますが、やろうとしていることは上記のような感じです。

1. については下記のような感じです。

View

...

<form action="xxxx">// 下記の<input type="text">が、1~N個となる。
<input name="values&#91;&#93;" type="text" value=""></form>...

2. についても下記のような処理で行けると考えていました。

Controller(A)

...
Session::set('values', Input::post('values'));
...

3. の処理では 2. の処理で入れた値を取り出します。

Controller(B)

...
$values = Session::get('values');
...

・・・しかし、値が入る場合と入らない場合があり、原因がわからないという状態でした。

まず、疑ったのがセッションが有効(動作していない)になっていないのではと言う事です。
ですが、入る場合もあり「なんでだよっ!」とモンモンとしながら連休を過ごしました。

間違いに気が付く・・・

そして、職場で話をしたところFuelPHPのセッション周りについての勘違いをしている部分がありました。

こちらとしては、php.iniの方で”session.save_handler”をmemcacheに設定していたのでセッションを利用する際には、memcachedが利用されていると思い込んでいる部分がありました。
※正確には、”/etc/php.d/memcache.ini”で設定。

ところが、FuelPHPの設定を確認していくと”core/config/session.php”の設定がデフォルトでは、セッションにcookieを利用すると言う内容になっていました。

そこで、”app/config”配下に”session.php”を用意し、memcacheを利用するように設定を行いました。

これでうまく行くと思っていたのですが、まだ駄目な部分がありました。

ライブラリが使えない

phpからmemcachedへの接続には、php-pecl-memcacheを利用していました。

しかし、FuelPHPで利用できるmemcacheのライブラリはphp-pecl-memcachedなのです。

と言う訳で、さくっと入れて動かしてしまいます。

php-pecl-memcachedのインストール

yum install php-pecl-memcached --enablerepo=epel

インストールが完了したら、php-fpmを再起動します。

/etc/init.d/php-fpm restart

ここまで出来ていれば、セッションの保持場所がcookieからmemcachedへ変わっているはずです。

総括

注意点(一番ハマッた)としては、cookieの場合に値が多くなりすぎるとセッションに値が入らないことがあると言う事です。

多次元配列を入れたりすると入らないことがありますので、もしFuelPHPを利用している際にセッションがおかしいと思ったときには、どこをセッションの保持場所としているかを確認してみると解決が早いかもしれません。

FuelPHPカテゴリの最新記事