EC-CUBEのセッションタイムアウトはどこで変更できますか

  • EC-CUBE2系
投稿日:2013/03/18
EC-CUBEのセッションタイムアウトの仕様というのは、お客様からよく尋ねられるトピックなので、まとめてみました。
(※EC-CUBE 2.12.2 についての情報です。 4系についてはこちら)


PC、スマートフォン


PC、スマートフォンについては、「MAX_LIFETIME」パラメーターにて設定可能です。
ただし、MAX_LIFETIMEに設定した値で必ずタイムアウトされる訳ではなく、
MAX_LIFETIME以前のデータを削除する処理が、
PHP設定のsession.gc_probabilityと、session.gc_divisorによって決定される確率で呼び出されます。

例えば、
[PHP設定] session.gc_probability = 1
[PHP設定] session.gc_divisor = 1000
[EC-CUBEのパラメーター] MAX_LIFETIME = 7200
の場合、他のセッションを更新する時に1000分の1の確率で、
7200秒(2時間)更新されていないセッションレコードが削除されるという訳です。

#↑「他のセッションを更新する時に」と書いている様に、
セッションが自分一つしかない場合には、セッションはタイムアウトされません。

※ただし、DBにMySQLを利用している場合、EC-CUBE 2.12.3以下のバージョンでは、MAX_LIFETIMEよりも早いタイミングでセッションが消えてしまう不具合があります。
この不具合の修正パッチは、以下のチケットから参照できます。
http://svn.ec-cube.net/open_trac/ticket/2177

また、PHP設定で、「session.gc_maxlifetime = 1440」といった設定もありますが、
EC-CUBEのセッションは、ファイルではなく、EC-CUBEのDBの中(dtb_sessionテーブル)に情報を保存しているため、この設定は関係ありません。(EC-CUBE 2.12系での話です。古いバージョンでは、セッションをファイルに保存していました)

また、「SESSION_LIFETIME」パラメーターは、GETでセッションIDを引き継ぐ時にのみ影響します。
(実際にはそのようなケースはほとんど無いので、あまり意味がないパラメーターです)


モバイル


モバイルについては、「MOBILE_SESSION_LIFETIME」パラメーターにて設定可能です。
(この時間を過ぎると、セッションレコードが存在していても、タイムアウトしたとみなされます)

ただし、「MAX_LIFETIME」パラメーターよりも長い時間を指定しても、効果はありません。
(MAX_LIFETIMEの時間でセッションレコード自体が削除されるためです)


その他(セッションのテストをする際のノウハウ等)


セッションのテストをする際には、 .htaccess に、
php_value session.gc_divisor 1
を設定すると確認しやすいです。
(他のセッションが更新される際に、100%の確率でガベージコレクタが動作するようになるためです)

関連カテゴリ