2015年10月16日

CakePHPでセッションがよく切れてしまうのを回避

 CakePHPを使ってWebアプリケーションを運用していると特定の条件でセッション切れがよく発生します。(よく発生してはダメです…)

 ページからリクエストした時にサーバーで処理が終わらないうちに再度、リクエストをするとCakePHP内でセッションが無いことになってエラーになってイました。
 CakePHPのソースまで追ってみたら、セッションを管理しているファイルをReadした時にそのファイルが無いことになっていてダメだったようです。
 この時は、セッション内容を持っているファイルをロックすることができなくてエラーになっていたのかと思っていました(いや、もしかするとそうなのかもしれない)

 そのシステムを使っているお客様からURLの一覧から画面を複数連続で開くとセッションが頻繁に切れるようになったのでなんとかしてほしいという要望というかクレームが上がってきました。

 再度、速い連続リクエストが原因でセッションが切れる問題を解決する記事が無いかちょっと調査したところ答えがありました。

 
 WEB制作所インレットさんのサイトです。

対応策に3つのことをする必要があるのですが、(1)と(3)は、対応していたので、(2)の対応をすることにしました。

結論からいうと、セッション切れになることもなく、連続表示したページは全て正しく表示されました。

 ただ、1点だけ腑に落ちないところがあります。
CakePHPのCore.php内のSessionの設定のろ頃でどこにセッションを作成するかの指定が効いていないようでした。
 私の環境では、"cake"としているのでCakePHPのセッション用ディレクトリに作成されるはずのところが、Apacheのphp.confで指定されているパス(php_value)で指定しているディレクトリに作成されています。

 1サーバーで複数のサイトを運用しているのでちょっと気持ち悪いですが、何か案がないか考えて見ようと思います。
 ※もしかすると、php_valueを各サイトのconfに書けば良いのかもしれないです。

この処理を追加します。

if(!isset($_SESSION)) {
    session_start();
}
関連記事
CakePHPにAjaxで連続リクエストするとダメなの?

0 件のコメント:

コメントを投稿