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時間)更新されていないセッションレコードが削除されるという訳です。
#↑「他のセッションを更新する時に」と書いている様に、
セッションが自分一つしかない場合には、セッションはタイムアウトされません。
また、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%の確率でガベージコレクタが動作するようになるためです)