EC-CUBEのセッション管理に関する不具合を見つけた

eccube

今までも不思議に思うことは多々あったのですが、EC-CUBEのセッション管理には不具合があるのを見つけてしまいました
MAX_LIFETIME(デフォルトだと7200秒)よりも早いタイミングでセッションが消えてしまう可能性があります

問題のコード

この問題はMySQLの場合のみ発生します

data/class/helper/SC_Helper_Session.php

この「current_timestamp + ‘-“. MAX_LIFETIME . ” secs’」が問題になります

PostgreSQLの場合

正しく2時間前の時間が指定されます

MySQLの場合

結果が文字列になっててわかりにくいのでcastしたものも追加してあります

2時間前にならずに2013-03-08 14:35:02(約30分前)の時間になってしまいました
これは、MySQLとPostgreSQLのSQLの書き方に違いがあるために起こっていることです

修正方法

MySQLを使っている人はこう書き換えればPostgreSQLと同じ結果になります

data/class/helper/SC_Helper_Session.php

SQLで書くとこうなります

自分でコミットすればいいんですが、コミッターのアカウントもパスワードもやる気も無くしちゃったので誰か開発合宿で直してコミットしておいてください(^_^;)
確認した範囲ではEC-CUBE2.4.4系から最新の2.12系まですべて影響を受けているものと思われます

参考サイト:【第34回】MySQLの日付計算 – Tech [Friday] プロモバイルエンジニアブログ

21:32 追記

早速コミットしてもらえたので次のバージョンあたりでは直っていそうです
http://svn.ec-cube.net/open_trac/changeset/22616

スポンサーリンク

シェアする

フォローする

コメント

  1. コミットしときましたぜ

  2. EC-cube dtb_sessionに関しての調査メモ | PROGRAM EMO より:

    […] セッションで消去する対象の検索SQL文修正 http://nob-log.info/2013/03/08/ec-cube-bugs-session/ http://svn.ec-cube.net/open_trac/changeset/22616 […]

コメントを残す

トップへ戻る