Index: /branches/version-2_13-dev/data/require_base.php
===================================================================
--- /branches/version-2_13-dev/data/require_base.php	(revision 22206)
+++ /branches/version-2_13-dev/data/require_base.php	(revision 23493)
@@ -38,7 +38,4 @@
         SC_Utils_Ex::sfInitInstall();
 
-        // セッションハンドラ開始
-        $objSession = new SC_Helper_Session_Ex();
-
         // セッション初期化・開始
         $sessionFactory = SC_SessionFactory_Ex::getInstance();
@@ -49,5 +46,5 @@
          * 認証処理忘れ防止のため, LC_Page_Admin::init() 等ではなく, ここでチェックする.
          */
-        $objSession->adminAuthorization();
+        SC_Helper_Session_Ex::adminAuthorization();
     }
 }
Index: /branches/version-2_13-dev/data/class/helper/SC_Helper_Mobile.php
===================================================================
--- /branches/version-2_13-dev/data/class/helper/SC_Helper_Mobile.php	(revision 23124)
+++ /branches/version-2_13-dev/data/class/helper/SC_Helper_Mobile.php	(revision 23493)
@@ -171,6 +171,6 @@
 
         // セッションIDの存在をチェックする。
-        $objSession = new SC_Helper_Session_Ex();
-        if ($objSession->sfSessRead($sessionId) === null) {
+        $sessionFactory = SC_SessionFactory_Ex::getInstance();
+        if ($sessionFactory->sfSessRead($sessionId) === null) {
             GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId");
 
Index: /branches/version-2_13-dev/data/class/helper/SC_Helper_Session.php
===================================================================
--- /branches/version-2_13-dev/data/class/helper/SC_Helper_Session.php	(revision 23492)
+++ /branches/version-2_13-dev/data/class/helper/SC_Helper_Session.php	(revision 23493)
@@ -15,130 +15,4 @@
 class SC_Helper_Session
 {
-    public $objDb;
-
-    /**
-     * デフォルトコンストラクタ.
-     *
-     * 各関数をセッションハンドラに保存する
-     */
-    public function __construct()
-    {
-        $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'));
-
-        // 通常よりも早い段階(オブジェクトが破棄される前)でセッションデータを書き込んでセッションを終了する
-        // XXX APC による MDB2 の破棄タイミングによる不具合を回避する目的
-        register_shutdown_function('session_write_close');
-    }
-
-    /**
-     * セッションを開始する.
-     *
-     * @param  string $save_path    セッションを保存するパス(使用しない)
-     * @param  string $session_name セッション名(使用しない)
-     * @return bool   セッションが正常に開始された場合 true
-     */
-    public function sfSessOpen($save_path, $session_name)
-    {
-        return true;
-    }
-
-    /**
-     * セッションを閉じる.
-     *
-     * @return bool セッションが正常に終了した場合 true
-     */
-    public function sfSessClose()
-    {
-        return true;
-    }
-
-    /**
-     * セッションのデータをDBから読み込む.
-     *
-     * @param  string $id セッションID
-     * @return string セッションデータの値
-     */
-    public function sfSessRead($id)
-    {
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-        $arrRet = $objQuery->select('sess_data', 'dtb_session', 'sess_id = ?', array($id));
-        if (empty($arrRet)) {
-            return '';
-        } else {
-            return $arrRet[0]['sess_data'];
-        }
-    }
-
-    /**
-     * セッションのデータをDBに書き込む.
-     *
-     * @param  string $id        セッションID
-     * @param  string $sess_data セッションデータの値
-     * @return bool   セッションの書き込みに成功した場合 true
-     */
-    public function sfSessWrite($id, $sess_data)
-    {
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-        $exists = $objQuery->exists('dtb_session', 'sess_id = ?', array($id));
-        $sqlval = array();
-        if ($exists) {
-            // レコード更新
-            $sqlval['sess_data'] = $sess_data;
-            $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
-            $objQuery->update('dtb_session', $sqlval, 'sess_id = ?', array($id));
-        } else {
-            // セッションデータがある場合は、レコード作成
-            if (strlen($sess_data) > 0) {
-                $sqlval['sess_id'] = $id;
-                $sqlval['sess_data'] = $sess_data;
-                $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
-                $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
-                $objQuery->insert('dtb_session', $sqlval);
-            }
-        }
-
-        return true;
-    }
-
-    // セッション破棄
-
-    /**
-     * セッションを破棄する.
-     *
-     * @param  string $id セッションID
-     * @return bool   セッションを正常に破棄した場合 true
-     */
-    public function sfSessDestroy($id)
-    {
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-        $objQuery->delete('dtb_session', 'sess_id = ?', array($id));
-
-        return true;
-    }
-
-    /**
-     * ガーベジコレクションを実行する.
-     *
-     * 引数 $maxlifetime の代りに 定数 MAX_LIFETIME を使用する.
-     *
-     * @param integer $maxlifetime セッションの有効期限(使用しない)
-     */
-    public function sfSessGc($maxlifetime)
-    {
-        // MAX_LIFETIME以上更新されていないセッションを削除する。
-        $objQuery =& SC_Query_Ex::getSingletonInstance();
-        $limit = date("Y-m-d H:i:s",time() - MAX_LIFETIME);
-        $where = "update_date < '". $limit . "' ";
-        $objQuery->delete('dtb_session', $where);
-
-        return true;
-    }
-
     /**
      * トランザクショントークンを生成し, 取得する.
@@ -226,5 +100,5 @@
      * @return void
      */
-    public function adminAuthorization()
+    public static function adminAuthorization()
     {
         if (($script_path = realpath($_SERVER['SCRIPT_FILENAME'])) !== FALSE) {
Index: /branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseRequest.php
===================================================================
--- /branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseRequest.php	(revision 23256)
+++ /branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseRequest.php	(revision 23493)
@@ -35,4 +35,5 @@
 class SC_SessionFactory_UseRequest extends SC_SessionFactory_Ex
 {
+    /** @var LC_UseRequest_State_Mobile|LC_UseRequest_State_PC  */
     public $state = null;
 
@@ -176,6 +177,5 @@
 
         // セッションIDの存在をチェックする。
-        $objSession = new SC_Helper_Session_Ex();
-        if ($objSession->sfSessRead($sessionId) === null) {
+        if ($this->sfSessRead($sessionId) === null) {
             GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId");
 
@@ -193,4 +193,6 @@
     public function initSession()
     {
+        parent::initSession();
+
         // セッションIDの受け渡しにクッキーを使用しない。
         ini_set('session.use_cookies', '0');
Index: /branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php
===================================================================
--- /branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php	(revision 23124)
+++ /branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php	(revision 23493)
@@ -44,4 +44,6 @@
     public function initSession()
     {
+        parent::initSession();
+
         ini_set('session.cache_limiter', 'none');
         // (session.auto_start などで)セッションが開始されていた場合に備えて閉じる。(FIXME: 保存する必要はない。破棄で良い。)
Index: /branches/version-2_13-dev/data/class/SC_SessionFactory.php
===================================================================
--- /branches/version-2_13-dev/data/class/SC_SessionFactory.php	(revision 23492)
+++ /branches/version-2_13-dev/data/class/SC_SessionFactory.php	(revision 23493)
@@ -86,4 +86,14 @@
     public function initSession()
     {
+        session_set_save_handler(array(&$this, 'sfSessOpen'),
+            array(&$this, 'sfSessClose'),
+            array(&$this, 'sfSessRead'),
+            array(&$this, 'sfSessWrite'),
+            array(&$this, 'sfSessDestroy'),
+            array(&$this, 'sfSessGc'));
+
+        // 通常よりも早い段階(オブジェクトが破棄される前)でセッションデータを書き込んでセッションを終了する
+        // XXX APC による MDB2 の破棄タイミングによる不具合を回避する目的
+        register_shutdown_function('session_write_close');
     }
 
@@ -95,4 +105,109 @@
     public function useCookie()
     {
+    }
+
+    /**
+     * セッションを開始する.
+     *
+     * @param  string $save_path    セッションを保存するパス(使用しない)
+     * @param  string $session_name セッション名(使用しない)
+     * @return bool   セッションが正常に開始された場合 true
+     */
+    public function sfSessOpen($save_path, $session_name)
+    {
+        return true;
+    }
+
+    /**
+     * セッションを閉じる.
+     *
+     * @return bool セッションが正常に終了した場合 true
+     */
+    public function sfSessClose()
+    {
+        return true;
+    }
+
+    /**
+     * セッションのデータをDBから読み込む.
+     *
+     * @param  string $id セッションID
+     * @return string セッションデータの値
+     */
+    public function sfSessRead($id)
+    {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $arrRet = $objQuery->select('sess_data', 'dtb_session', 'sess_id = ?', array($id));
+        if (empty($arrRet)) {
+            return '';
+        } else {
+            return $arrRet[0]['sess_data'];
+        }
+    }
+
+    /**
+     * セッションのデータをDBに書き込む.
+     *
+     * @param  string $id        セッションID
+     * @param  string $sess_data セッションデータの値
+     * @return bool   セッションの書き込みに成功した場合 true
+     */
+    public function sfSessWrite($id, $sess_data)
+    {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $exists = $objQuery->exists('dtb_session', 'sess_id = ?', array($id));
+        $sqlval = array();
+        if ($exists) {
+            // レコード更新
+            $sqlval['sess_data'] = $sess_data;
+            $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
+            $objQuery->update('dtb_session', $sqlval, 'sess_id = ?', array($id));
+        } else {
+            // セッションデータがある場合は、レコード作成
+            if (strlen($sess_data) > 0) {
+                $sqlval['sess_id'] = $id;
+                $sqlval['sess_data'] = $sess_data;
+                $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
+                $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
+                $objQuery->insert('dtb_session', $sqlval);
+            }
+        }
+
+        return true;
+    }
+
+    // セッション破棄
+
+    /**
+     * セッションを破棄する.
+     *
+     * @param  string $id セッションID
+     * @return bool   セッションを正常に破棄した場合 true
+     */
+    public function sfSessDestroy($id)
+    {
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $objQuery->delete('dtb_session', 'sess_id = ?', array($id));
+
+        return true;
+    }
+
+    /**
+     * ガーベジコレクションを実行する.
+     *
+     * 引数 $maxlifetime の代りに 定数 MAX_LIFETIME を使用する.
+     *
+     * @param integer $maxlifetime セッションの有効期限(使用しない)
+     * @return bool
+     */
+    public function sfSessGc($maxlifetime)
+    {
+        // MAX_LIFETIME以上更新されていないセッションを削除する。
+        $objQuery =& SC_Query_Ex::getSingletonInstance();
+        $limit = date("Y-m-d H:i:s",time() - MAX_LIFETIME);
+        $where = "update_date < '". $limit . "' ";
+        $objQuery->delete('dtb_session', $where);
+
+        return true;
     }
 }
