EC-CUBEでロードバランサーを使ったウェブサーバー冗長化には必要になってくる、セッションの脱ファイル化、DB化についてご紹介します。
EC-CUBE4では簡単な3ステップでセッションのテーブル保存を実現することができます。
1. セッションを保存するテーブル作成
マイグレーションなどでセッションデータを保存するテーブルを作っておきます。BLOBだと足りないことがあるのでLONGBLOBにしておくのがポイントです。ちなみにMySQLです。
public function up(Schema $schema) : void { $this->addSql('CREATE TABLE `sessions` ( `sess_id` VARCHAR(128) NOT NULL PRIMARY KEY, `sess_data` LONGBLOB NOT NULL, `sess_time` INTEGER UNSIGNED NOT NULL, `sess_lifetime` MEDIUMINT NOT NULL ) COLLATE utf8_bin, ENGINE = InnoDB;'); }
2. app/config/eccube/packages/session.yamlを追加
PdoSessionHandlerをサービス登録しておきます。.envのDATABASE_URLを利用するのがコツです。
services: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler: public: false arguments: - '%env(DATABASE_URL)%'
3. app/config/eccube/packages/framework.yamlを修正
サイトでPdoSessionHandlerを使用するように指定。
framework: session: handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
4. (おまけ) app/config/eccube/packages/install/framework.yamlを追加
インストール前に設置を行うのであれば、インストール時のセッションはファイルのままにします。
framework: session: handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
AWSのStickSession等を使えばDBセッションは必要ないかもしれませんが、EC-CUBEのセッションがファイルにあるのは気持ち悪いという方にはオススメのカスタマイズです。WordPressのセッションもDB化されていますからね。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。