[Svn-src-all:2725] [version-2_12-dev 21624] #1694 (SC_SessionFactory#getInstance モバイルの default が不自然な動作)

Seasoft admin @ mail.ec-cube.net
2012年 3月 11日 (日) 15:22:55 JST


Subversion committed to /home/svn/open 21624
http://svn.ec-cube.net/open_trac/changeset/21624
┌────────────────────────────┐
│更新者 :  Seasoft                                      │
│更新日時:  2012-03-11 15:22:55 +0900 (日, 11  3月 2012)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#1694 (SC_SessionFactory#getInstance モバイルの default が不自然な動作)
#1695 (同一ホストに複数の EC-CUBE や他の PHP アプリケーションを導入した場合、セッションキーを共有する)
#1613 (typo修正・ソース整形・ソースコメントの改善)

Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_12-dev/data/class/SC_Cookie.php
U   branches/version-2_12-dev/data/class/SC_SessionFactory.php
U   branches/version-2_12-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php

変更: branches/version-2_12-dev/data/class/SC_Cookie.php
===================================================================
--- branches/version-2_12-dev/data/class/SC_Cookie.php	2012-03-09 12:14:46 UTC (rev 21623)
+++ branches/version-2_12-dev/data/class/SC_Cookie.php	2012-03-11 06:22:55 UTC (rev 21624)
@@ -21,7 +21,10 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
-/* 日時表示用クラス */
+/**
+ * クッキー用クラス
+ *
+ */
 class SC_Cookie {
 
     var $expire;
@@ -34,10 +37,14 @@
 
     // クッキー書き込み
     function setCookie($key, $val) {
-        setcookie($key, $val, $this->expire, '/', DOMAIN_NAME);
+        setcookie($key, $val, $this->expire, ROOT_URLPATH, DOMAIN_NAME);
     }
 
-    // クッキー取得
+    /**
+     * クッキー取得
+     *
+     * EC-CUBE をURLパスルート以外にインストールしている場合、上位ディレクトリの値も(劣後ではあるが)取得する点に留意。
+     */
     function getCookie($key) {
         return isset($_COOKIE[$key]) ? $_COOKIE[$key] : null;
     }

変更: branches/version-2_12-dev/data/class/SC_SessionFactory.php
===================================================================
--- branches/version-2_12-dev/data/class/SC_SessionFactory.php	2012-03-09 12:14:46 UTC (rev 21623)
+++ branches/version-2_12-dev/data/class/SC_SessionFactory.php	2012-03-11 06:22:55 UTC (rev 21624)
@@ -68,14 +68,14 @@
 
             // クッキーを使用する
             case 'useCookie':
+            default:
                 // モバイルの場合はSC_SessionFactory_UseRequestを使用する
                 if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE) {
                     $session = new SC_SessionFactory_UseRequest;
                     $session->setState('mobile');
-                    break;
+                } else {
+                    $session = new SC_SessionFactory_UseCookie;
                 }
-            default:
-                $session = new SC_SessionFactory_UseCookie;
                 break;
         }
 

変更: branches/version-2_12-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php
===================================================================
--- branches/version-2_12-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php	2012-03-09 12:14:46 UTC (rev 21623)
+++ branches/version-2_12-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php	2012-03-11 06:22:55 UTC (rev 21624)
@@ -40,14 +40,14 @@
     /**
      * セッションパラメーターの指定
      * ・ブラウザを閉じるまで有効
-     * ・すべてのパスで有効
-     *   FIXME 多分、同一ホスト名に複数の EC-CUBE をインストールした場合に望ましくない状態である。特段の事由がなければ、アプリケーションルートを指定すべきだし、あればコメントに残すべき。
+     * ・EC-CUBE ルート配下で有効
      * ・同じドメイン間で共有
+     * FIXME セッションキーのキーが PHP デフォルトのため、上位ディレクトリーで定義があると、その値で動作すると考えられる。
      **/
     function initSession() {
         ini_set('session.cache_limiter', 'none');
         if (session_id() === '') {
-            session_set_cookie_params(0, '/', DOMAIN_NAME);
+            session_set_cookie_params(0, ROOT_URLPATH, DOMAIN_NAME);
             if (!ini_get('session.auto_start')) {
                 // セッション開始
                 session_start();




Svn-src-all メーリングリストの案内