xoopsのセッションを延長して、データ消えを回避
ヤマレコでは、cubeUtilのオートログイン機能を使っています。
セッションを使ってPOSTするようなFormがあるときに、セッションの有効期限が切れていると「Retry Post」というメッセージが出て、入力FormのPOSTデータが消えてしまうことがあるようです。
この問題が起きるたびに、
「1時間頑張って書いた記録が消えた、どうなってるんだ」
みたいな、
書いた人の状況を考えると、
「こんなシステム、もう二度と書いてやるか」
と思いそうな不具合報告を受けるので、何とかして回避したいと思ってました。
今回は暫定対処として、まずはセッションの持続期間を長くして、セッション切れが起きにくくなるようにしました。
セッションハイジャックの危険性が上がるので、セキュリティ的には問題だし、時間を延ばすだけなのでPOSTデータが消えるという問題は解決しないのですが、それも仕方ないかと。
対処内容
xoopsの全般設定メニューにセッション関連の項目があります。
「セッションの設定をカスタマイズする」⇒ 「はい」にチェック
「セッションがタイムアウトするまでの時間」⇒ 時間を指定
これだけでうまくいくのかと思ったのですが、まだ30分ぐらい経つとデータが消える症状が出ました。
で、Cookieの有効期限を確認しましたが、設定していた時間になっていました。
だとするとサーバ側のデータが消されているんだろうと推測し、php.iniの設定を変更しました。
例えば、60分にする場合は
session.gc_maxlifetime 3600
とすればOK。
また、.htaccessに
php_value session.gc_maxlifetime 3600
と指定してもいいようです。
これでとりあえず治ったようなのでひと安心。