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

  • EC-CUBE4系
投稿日:2022/12/19
セッションの保持期間を長くしたいという場面はよくあるので、4系についてもまとめました。
<EC-CUBE 4.2での情報です。 EC-CUBE 2系についてはこちら


結論


「ECCUBE_COOKIE_LIFETIME」と、「ECCUBE_GC_MAXLIFETIME」パラメーターにて設定可能です。

例えば、↓の様に設定すると、セッションタイムアウトの時間を2ヶ月間に延ばすことができます。
ECCUBE_COOKIE_LIFETIME=5184000
ECCUBE_GC_MAXLIFETIME=5184000
※ただし、2ヶ月分のセッションデータのデータ量は相当なものになります。

解説


「ECCUBE_GC_MAXLIFETIME」がサーバ側で持っているセッションデータの保持期間、
「ECCUBE_COOKIE_LIFETIME」が、セッションIDをブラウザのCookie(クッキー)で保持する期間の設定です。
いずれも秒数で指定します。

セッションIDは、サーバ側で持っているセッションデータを利用するための鍵のようなものです。

デフォルトでは、↓の状態になっています。( eccube/app/config/eccube/packages/eccube.yaml ファイル)
env(ECCUBE_COOKIE_LIFETIME): '0' ←ブラウザを閉じるまで
env(ECCUBE_GC_MAXLIFETIME): '1440' ←1440秒(24分間)

つまり、サーバ側のセッションデータは少なくとも24分間は生存していますが、
ブラウザを閉じた時点で、自分が持っている鍵(ブラウザのクッキーが持っているセッションID)が破棄されるので、その時点でセッションデータとの繋がりは切れます。
また、ブラウザを閉じなくても、24分を超えて放置していると、サーバ側のセッションデータ自体が無くなっていて、セッションが切れる(セッションタイムアウトとなる)という設定です。

クッキーで持っているセッションIDの保持期間の設定について


試しに、eccube/.env ファイルに↓の設定を追記した場合、クッキーで持っているセッションIDが60秒を超えると利用できなくなります。60秒間操作しないとセッションが切れるようになります。(実験のための設定です)

ECCUBE_COOKIE_LIFETIME=60

実際は、ブラウザを閉じてもセッションが切れない様にしたいという場合が多いですので、必要な保持期間を秒数で指定します。

例えば、2ヶ月間の場合、↓の様に 5184000秒(←60秒×60分×24時間×60日)を設定します。
ECCUBE_COOKIE_LIFETIME=5184000



サーバ側に保存しているセッションデータの保持期間の設定について


カギだけ2ヶ月間持てるようにするだけでなく、データの本体も2ヶ月間は保管されるようにするため
サーバ側のセッションデータの保持期間も同じように設定します。
ECCUBE_GC_MAXLIFETIME=5184000

ただし、セッションデータの本体の方は、2ヶ月経った時点で必ず削除される訳ではなく、
ECCUBE_GC_MAXLIFETIME以前のデータを削除する処理が、
PHP設定のsession.gc_probabilityと、session.gc_divisorによって決定される確率で呼び出されます。

例えば、
[PHP設定] session.gc_probability = 1
[PHP設定] session.gc_divisor = 1000
[EC-CUBEのパラメーター] ECCUBE_GC_MAXLIFETIME = 7200
の場合、他のセッションを更新する時に1000分の1の確率で、
7200秒(2時間)更新されていないセッションデータが削除されるという訳です。
※ ↑「他のセッションを更新する時に」の通り、セッションが自分一つしかない場合には、セッションはタイムアウトされません。


サーバ側に保存しているセッションデータの保存場所について


「EC-CUBE管理画面→設定→システム設定→システム情報」画面で「session.save_path」を確認すると、セッションデータの保存場所を確認できます。

Webサーバを複数台構成にしたい場合など、セッションデータをデータベースに保存したい場合がありますが、RDBMS、Memcached、MongoDBへの保存方法は EC-CUBE4開発者向けドキュメントサイトに情報があります。
最近では、Amazon ElastiCacheのRedisも選択肢ですね。


セッションのテストをする際のtips


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


余談


EC-CUBE ⇔ LINEWORKSとの連携を行う際に一つのポイントになったのもセッション周りでした。
最初はEC-CUBEとLINEを連携させるという事の意味が良く分かりませんでしたが、実際に触ってみれば、スマホでLINEするような感覚で手軽に商品を購入できるというのは便利だなぁと感じました。
立ち仕事が多いスタッフさんにとっては、一層そう感じていただけるのではないかなと思います。
弊社ではEC-CUBE⇔LINEWORKSとの連携についても対応可能ですので、どうぞお問い合わせください。
関連カテゴリ