バージョン選択

フォーラム

メニュー

オンライン状況

45 人のユーザが現在オンラインです。 (40 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 45
もっと...

サイト内検索

バグ報告 > フロント機能 > SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
coelacanth
投稿日時: 2011/6/1 17:02
対応状況: −−−
半人前
登録日: 2011/1/31
居住地:
投稿: 26
SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
 バグというわけではないかもしれませんが、
 EC-CUBE2.11で購入商品数を増やすなどでSESSIONのデータ量が増えるとMySQLのTEXT型の容量を超えてしまいデータが欠損する症状を確認しました。

 対応としてはSESSIONのデータを少なくする&TEXT型をLONGTEXT型にするなどが有効そうです。

 PostgresのTEXT型は無限サイズなんですねぇ。

 以上、報告まで。
coelacanth
投稿日時: 2011/6/1 19:11
対応状況: −−−
半人前
登録日: 2011/1/31
居住地:
投稿: 26
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
チケット作成
「MySQLでSESSIONをDB保存する際の型がTEXT型なのでデータ量によってはあふれる」
http://svn.ec-cube.net/open_trac/ticket/1341
nanasess
投稿日時: 2011/6/1 19:40
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
レンタルサーバーなど, Web サーバーを冗長化しないような環境でしたら, セッションデータは DB に保存しなくても良いと思われますので,

data/class/helper/SC_Helper_Session.php のコンストラクタの処理を以下のようにコメントアウトしてあげれば対処できると思われます


     function SC_Helper_Session() {
         $this->objDb = new SC_Helper_DB_Ex();
         /*
         session_set_save_handler(array(&$this, 'sfSessOpen'),
                                  array(&$this, 'sfSessClose'),
                                  array(&$this, 'sfSessRead'),
                                  array(&$this, 'sfSessWrite'),
                                  array(&$this, 'sfSessDestroy'),
                                  array(&$this, 'sfSessGc'));
          */
     }


red
投稿日時: 2011/6/1 19:47
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1567
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
sfSessReadを直接呼んでる部分が何箇所かあったと思うので、その対処だけじゃ動かなくなっちゃうような気が。。。


        // セッションIDの存在をチェックする。
        $objSession = new SC_Helper_Session_Ex();
        if ($objSession->sfSessRead($sessionId) === null) {
            GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId");
            return false;
        }
seasoft
投稿日時: 2011/6/1 20:09
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
大したオーバーヘッドもないようなので、この際全てのカラムを LONGTEXT にすれば、とか思うのですが、どうでしょう? > MySQL 詳しい方

まぁ、2.11 のセッション情報の冗長さは少し改めないといけないと思いますね。たしか、カート周りは、商品情報をクラスから受け取った値を丸ごと突っ込んでいます。そして、値を取得するときも、色んな所から、てんでんばらばらと使ってて、バグの温床のニオイがします。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

shutta
投稿日時: 2011/8/15 16:14
対応状況: −−−
仙人
登録日: 2010/2/4
居住地: 関西
投稿: 835
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
横からすみません。

引用:

seasoftさんは書きました:
大したオーバーヘッドもないようなので、この際全てのカラムを LONGTEXT にすれば、とか思うのですが、どうでしょう? > MySQL 詳しい方


(詳しい人ではないですが、)オーバーヘッド面では問題ないかと思いますが、全てのカラムに対してよりは、明示的にTEXT型以上のサイズが必要なものだけ型変更した方が分かり易いかと思います。
(チケットのコメントにも記載しましたが、こちらにも改めて話題を振り直します。)

引用:

まぁ、2.11 のセッション情報の冗長さは少し改めないといけないと思いますね。たしか、カート周りは、商品情報をクラスから受け取った値を丸ごと突っ込んでいます。そして、値を取得するときも、色んな所から、てんでんばらばらと使ってて、バグの温床のニオイがします。


こちらは、

r21191
http://svn.ec-cube.net/open_trac/changeset/21191

にてコミットしてみました。
一応動作確認はしていますが、色々な部分に影響していそうなので、細かなところで問題が出ていないか少し不安です。

本来は、商品情報を取得する部分を書き換えて、必要な情報だけ取得するように書き直すべきかもしれませんが、下位互換性というか、カスマイズ等で、デフォルトで必要な項目以外の項目を参照している場合も影響が少ないように r21191 のような変更にしてみました。

実装的には、既存の商品情報をがさっと突っ込んでいる部分はそのままにしておいて、そこから必要でない項目をunsetしています。

今回追加した、adjustSessionProductsClass()を、class_extends/SC_CartSession_Ex.php側で書き換えれば、カスタマイズしている方も既存の動きが保てるようにしています。
また、何もしない関数に上書きすれば、今まで通りの挙動になります。


----------------

リゾート会員権(エクシブ等)の売買・仲介

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,288名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.