EC-CUBE2系で商品を大量にカートに入れると注文情報が抜けたりカートが消えたりする
EC-CUBE2系でMySQLを使用しているシステムでは、カートに数十個を超えるような沢山の商品を入れると、カートの情報が消えたりします。
また少し多い数の商品をカートに入れて注文するだけでも、受注メールが送信されるにもかかわらず、送料計算ができなくなったり管理画面で受注データが見れないなどの障害が発生します。
EC-CUBE2では、セッション情報をDBに保存していますが、セッションの格納されるカラムの最大サイズをオーバーしてデータが欠損するためです。
セッションの格納されるカラムの型はtext型で、MySQLのtext型の最大文字数は65,535バイトです。
カートに商品を入れると、カートに入れた商品の情報がセッションに保存されます。
カートに入れる商品数が多く、DBに保存しきれなくなると、まずセッション情報の入りきれない部分が欠落した状態でDBに保存され、その後セッション情報が消えるためカート情報が消えます。
注文画面では、カートの商品情報に加え、送料を計算するための商品詳細情報と注文情報が含まれるため、カートよりもデータ欠損するまでの商品数が少なくなります。
また注文情報はカート情報の後に追記され、セッション情報が消えるときは末尾から消えるため、注文関連の情報が欠損しやすくなります。
PostgreSQLでは、text型の最大長は1GBのためこの障害はあまり発生しません。
解決方法
この障害を回避する対策は、セッションの格納されるカラムをtext型からサイズの大きいmediumtext型やlongtext型にします。
セッション情報が格納されるカラムは、セッションデータテーブルのdtb_sessionだけでなく注文一時情報テーブルのdtb_order_tempにもあります。
alter table dtb_session modify sess_data mediumtext; alter table dtb_order_temp modify session mediumtext;
MySQLのtext型
型 | サイズ |
---|---|
TINYTEXT | 最長255 バイト |
TEXT | 最長65,535 バイト(64KB) |
MEDIUMTEXT | 最長16,777,215 バイト(約1.6MB) |
LONGTEXT | 最長4,294,967,295 バイト(約4.3GB) |
EC-CUBE2のセッションの扱いは、排他処理がされていないなど様々な問題があります。
またEC-CUBEはPostgreSQLを主にして作成されているようで、MySQLで無改造で使用するにはインデックスの考慮が足りなかったりしてサイト規模が大きいとトラブルが発生しやすくなります。
スポンサーリンク
関連記事
- EC-CUBEのダウンロードページ(過去のバージョン)
- 新規ページを追加するとSC_Utils_Ex::sfChangeCheckBox()のエラーが出るときの対処法
- PostgreSQLからMySQL、MySQLからPostgreSQLの変更
- EC-CUBEのサーバ移行の方法
- EC-CUBEのバックアップ機能とリストア
- EC-CUBEでMySQLデータベースのデータ取得で文字化けするときの対処法
- ページごとのスタイルシート、JavaScriptを指定する方法
- テンプレートの編集
- カテゴリ名など文字列を丸めると文字化けする EC-CUBEのバグ
- 基本的な特徴
- DB設計を見直してEC-CUBEを高速化する
- 郵便番号データの登録/更新
- インストール 初期設定
- EC-CUBE
- PHP
- MySQL MariaDB
- データベースを定時バックアップする方法(毎日バックアップする処理)
- 携帯電話端末の判別ライブラリ Net_UserAgent_Mobile
- Zend Optimizerのインストール
- forとforeachの速度比較
- Nucleus
- NetCommons(ネットコモンズ)
- UTF-8からSJISで文字化け
- PEAR・PECLをインストールする方法
- simplexml_load_file()、simplexml_load_string()でparser error : Input is not proper UTF-8, indicate encoding !
- cron実行時の標準出力のメールを飛ばさない方法(cron実行時に毎回メールを飛ばさない)
- セッション固定攻撃(session fixation)
- Zend_DBの基本
- MySQL(MariaDB)をユーザー情報を含めてすべて移行する方法
- PHPをコマンドラインから使用する方法
- 画像の保存やメール転送を制限する方法
- コマンドラインからpearを実行するとエラーが出る 環境変数PHP_PEAR_PHP_BINの設定
スポンサーリンク