Changeset 23655


Ignore:
Timestamp:
2014/10/14 12:07:56 (10 years ago)
Author:
kim
Message:

#2565 r23491 r23493 をリバート

既存関数の削除が影響が大き為、2.13.3では見送り、後方互換をがはいれば、2.13.4では採用を検討

Location:
branches/version-2_13_3/data
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13_3/data/class/SC_Customer.php

    r23606 r23655  
    341341                } else { 
    342342                    // Session Fixation対策 
    343                     SC_Helper_Session_Ex::regenerateSID(); 
     343                    SC_Session_Ex::regenerateSID(); 
    344344 
    345345                    $this->updateMobilePhoneId(); 
     
    356356                } else { 
    357357                    // Session Fixation対策 
    358                     SC_Helper_Session_Ex::regenerateSID(); 
     358                    SC_Session_Ex::regenerateSID(); 
    359359 
    360360                    return true; 
  • branches/version-2_13_3/data/class/SC_Session.php

    r23605 r23655  
    142142        GC_Utils_Ex::gfPrintLog('logout : user='.$this->login_id.' auth='.$this->authority.' sid='.$this->sid); 
    143143    } 
     144 
     145    /** 
     146     * セッションIDを新しいIDに書き換える 
     147     * 
     148     * @return bool 
     149     */ 
     150    public function regenerateSID() 
     151    { 
     152        return session_regenerate_id(true); 
     153    } 
    144154} 
  • branches/version-2_13_3/data/class/SC_SessionFactory.php

    r23605 r23655  
    8686    public function initSession() 
    8787    { 
    88         session_set_save_handler(array(&$this, 'sfSessOpen'), 
    89             array(&$this, 'sfSessClose'), 
    90             array(&$this, 'sfSessRead'), 
    91             array(&$this, 'sfSessWrite'), 
    92             array(&$this, 'sfSessDestroy'), 
    93             array(&$this, 'sfSessGc')); 
    94  
    95         // 通常よりも早い段階(オブジェクトが破棄される前)でセッションデータを書き込んでセッションを終了する 
    96         // XXX APC による MDB2 の破棄タイミングによる不具合を回避する目的 
    97         register_shutdown_function('session_write_close'); 
    9888    } 
    9989 
     
    10696    { 
    10797    } 
    108  
    109     /** 
    110      * セッションを開始する. 
    111      * 
    112      * @param  string $save_path    セッションを保存するパス(使用しない) 
    113      * @param  string $session_name セッション名(使用しない) 
    114      * @return bool   セッションが正常に開始された場合 true 
    115      */ 
    116     public function sfSessOpen($save_path, $session_name) 
    117     { 
    118         return true; 
    119     } 
    120  
    121     /** 
    122      * セッションを閉じる. 
    123      * 
    124      * @return bool セッションが正常に終了した場合 true 
    125      */ 
    126     public function sfSessClose() 
    127     { 
    128         return true; 
    129     } 
    130  
    131     /** 
    132      * セッションのデータをDBから読み込む. 
    133      * 
    134      * @param  string $id セッションID 
    135      * @return string セッションデータの値 
    136      */ 
    137     public function sfSessRead($id) 
    138     { 
    139         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    140         $arrRet = $objQuery->select('sess_data', 'dtb_session', 'sess_id = ?', array($id)); 
    141         if (empty($arrRet)) { 
    142             return ''; 
    143         } else { 
    144             return $arrRet[0]['sess_data']; 
    145         } 
    146     } 
    147  
    148     /** 
    149      * セッションのデータをDBに書き込む. 
    150      * 
    151      * @param  string $id        セッションID 
    152      * @param  string $sess_data セッションデータの値 
    153      * @return bool   セッションの書き込みに成功した場合 true 
    154      */ 
    155     public function sfSessWrite($id, $sess_data) 
    156     { 
    157         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    158         $exists = $objQuery->exists('dtb_session', 'sess_id = ?', array($id)); 
    159         $sqlval = array(); 
    160         if ($exists) { 
    161             // レコード更新 
    162             $sqlval['sess_data'] = $sess_data; 
    163             $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 
    164             $objQuery->update('dtb_session', $sqlval, 'sess_id = ?', array($id)); 
    165         } else { 
    166             // セッションデータがある場合は、レコード作成 
    167             if (strlen($sess_data) > 0) { 
    168                 $sqlval['sess_id'] = $id; 
    169                 $sqlval['sess_data'] = $sess_data; 
    170                 $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 
    171                 $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; 
    172                 $objQuery->insert('dtb_session', $sqlval); 
    173             } 
    174         } 
    175  
    176         return true; 
    177     } 
    178  
    179     // セッション破棄 
    180  
    181     /** 
    182      * セッションを破棄する. 
    183      * 
    184      * @param  string $id セッションID 
    185      * @return bool   セッションを正常に破棄した場合 true 
    186      */ 
    187     public function sfSessDestroy($id) 
    188     { 
    189         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    190         $objQuery->delete('dtb_session', 'sess_id = ?', array($id)); 
    191  
    192         return true; 
    193     } 
    194  
    195     /** 
    196      * ガーベジコレクションを実行する. 
    197      * 
    198      * 引数 $maxlifetime の代りに 定数 MAX_LIFETIME を使用する. 
    199      * 
    200      * @param integer $maxlifetime セッションの有効期限(使用しない) 
    201      * @return bool 
    202      */ 
    203     public function sfSessGc($maxlifetime) 
    204     { 
    205         // MAX_LIFETIME以上更新されていないセッションを削除する。 
    206         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    207         $limit = date("Y-m-d H:i:s", time() - MAX_LIFETIME); 
    208         $where = "update_date < '". $limit . "' "; 
    209         $objQuery->delete('dtb_session', $where); 
    210  
    211         return true; 
    212     } 
    21398} 
    21499/* 
  • branches/version-2_13_3/data/class/helper/SC_Helper_Mobile.php

    r23546 r23655  
    171171 
    172172        // セッションIDの存在をチェックする。 
    173         $sessionFactory = SC_SessionFactory_Ex::getInstance(); 
    174         if ($sessionFactory->sfSessRead($sessionId) === null) { 
     173        $objSession = new SC_Helper_Session_Ex(); 
     174        if ($objSession->sfSessRead($sessionId) === null) { 
    175175            GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId"); 
    176176 
  • branches/version-2_13_3/data/class/helper/SC_Helper_Session.php

    r23546 r23655  
    1515class SC_Helper_Session 
    1616{ 
     17    public $objDb; 
     18 
     19    /** 
     20     * デフォルトコンストラクタ. 
     21     * 
     22     * 各関数をセッションハンドラに保存する 
     23     */ 
     24    public function __construct() 
     25    { 
     26        $this->objDb = new SC_Helper_DB_Ex(); 
     27        session_set_save_handler(array(&$this, 'sfSessOpen'), 
     28                                 array(&$this, 'sfSessClose'), 
     29                                 array(&$this, 'sfSessRead'), 
     30                                 array(&$this, 'sfSessWrite'), 
     31                                 array(&$this, 'sfSessDestroy'), 
     32                                 array(&$this, 'sfSessGc')); 
     33 
     34        // 通常よりも早い段階(オブジェクトが破棄される前)でセッションデータを書き込んでセッションを終了する 
     35        // XXX APC による MDB2 の破棄タイミングによる不具合を回避する目的 
     36        register_shutdown_function('session_write_close'); 
     37    } 
     38 
     39    /** 
     40     * セッションを開始する. 
     41     * 
     42     * @param  string $save_path    セッションを保存するパス(使用しない) 
     43     * @param  string $session_name セッション名(使用しない) 
     44     * @return bool   セッションが正常に開始された場合 true 
     45     */ 
     46    public function sfSessOpen($save_path, $session_name) 
     47    { 
     48        return true; 
     49    } 
     50 
     51    /** 
     52     * セッションを閉じる. 
     53     * 
     54     * @return bool セッションが正常に終了した場合 true 
     55     */ 
     56    public function sfSessClose() 
     57    { 
     58        return true; 
     59    } 
     60 
     61    /** 
     62     * セッションのデータをDBから読み込む. 
     63     * 
     64     * @param  string $id セッションID 
     65     * @return string セッションデータの値 
     66     */ 
     67    public function sfSessRead($id) 
     68    { 
     69        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     70        $arrRet = $objQuery->select('sess_data', 'dtb_session', 'sess_id = ?', array($id)); 
     71        if (empty($arrRet)) { 
     72            return ''; 
     73        } else { 
     74            return $arrRet[0]['sess_data']; 
     75        } 
     76    } 
     77 
     78    /** 
     79     * セッションのデータをDBに書き込む. 
     80     * 
     81     * @param  string $id        セッションID 
     82     * @param  string $sess_data セッションデータの値 
     83     * @return bool   セッションの書き込みに成功した場合 true 
     84     */ 
     85    public function sfSessWrite($id, $sess_data) 
     86    { 
     87        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     88        $exists = $objQuery->exists('dtb_session', 'sess_id = ?', array($id)); 
     89        $sqlval = array(); 
     90        if ($exists) { 
     91            // レコード更新 
     92            $sqlval['sess_data'] = $sess_data; 
     93            $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 
     94            $objQuery->update('dtb_session', $sqlval, 'sess_id = ?', array($id)); 
     95        } else { 
     96            // セッションデータがある場合は、レコード作成 
     97            if (strlen($sess_data) > 0) { 
     98                $sqlval['sess_id'] = $id; 
     99                $sqlval['sess_data'] = $sess_data; 
     100                $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 
     101                $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; 
     102                $objQuery->insert('dtb_session', $sqlval); 
     103            } 
     104        } 
     105 
     106        return true; 
     107    } 
     108 
     109    // セッション破棄 
     110 
     111    /** 
     112     * セッションを破棄する. 
     113     * 
     114     * @param  string $id セッションID 
     115     * @return bool   セッションを正常に破棄した場合 true 
     116     */ 
     117    public function sfSessDestroy($id) 
     118    { 
     119        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     120        $objQuery->delete('dtb_session', 'sess_id = ?', array($id)); 
     121 
     122        return true; 
     123    } 
     124 
     125    /** 
     126     * ガーベジコレクションを実行する. 
     127     * 
     128     * 引数 $maxlifetime の代りに 定数 MAX_LIFETIME を使用する. 
     129     * 
     130     * @param integer $maxlifetime セッションの有効期限(使用しない) 
     131     */ 
     132    public function sfSessGc($maxlifetime) 
     133    { 
     134        // MAX_LIFETIME以上更新されていないセッションを削除する。 
     135        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     136        $limit = date("Y-m-d H:i:s",time() - MAX_LIFETIME); 
     137        $where = "update_date < '". $limit . "' "; 
     138        $objQuery->delete('dtb_session', $where); 
     139 
     140        return true; 
     141    } 
     142 
    17143    /** 
    18144     * トランザクショントークンを生成し, 取得する. 
     
    122248        SC_Utils_Ex::sfIsSuccess(new SC_Session_Ex()); 
    123249    } 
    124  
    125     /** 
    126      * セッションIDを新しいIDに書き換える 
    127      * 
    128      * @return bool 
    129      */ 
    130     public static function regenerateSID() 
    131     { 
    132         return session_regenerate_id(true); 
    133     } 
    134250} 
  • branches/version-2_13_3/data/class/pages/admin/LC_Page_Admin_Index.php

    r23606 r23655  
    187187    { 
    188188        // Session Fixation対策 
    189         SC_Helper_Session_Ex::regenerateSID(); 
     189        SC_Session_Ex::regenerateSID(); 
    190190 
    191191        $objSess = new SC_Session_Ex(); 
  • branches/version-2_13_3/data/class/sessionfactory/SC_SessionFactory_UseCookie.php

    r23546 r23655  
    4444    public function initSession() 
    4545    { 
    46         parent::initSession(); 
    47  
    4846        ini_set('session.cache_limiter', 'none'); 
    4947        // (session.auto_start などで)セッションが開始されていた場合に備えて閉じる。(FIXME: 保存する必要はない。破棄で良い。) 
  • branches/version-2_13_3/data/class/sessionfactory/SC_SessionFactory_UseRequest.php

    r23546 r23655  
    3535class SC_SessionFactory_UseRequest extends SC_SessionFactory_Ex 
    3636{ 
    37     /** @var LC_UseRequest_State_Mobile|LC_UseRequest_State_PC  */ 
    3837    public $state = null; 
    3938 
     
    177176 
    178177        // セッションIDの存在をチェックする。 
    179         if ($this->sfSessRead($sessionId) === null) { 
     178        $objSession = new SC_Helper_Session_Ex(); 
     179        if ($objSession->sfSessRead($sessionId) === null) { 
    180180            GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId"); 
    181181 
     
    193193    public function initSession() 
    194194    { 
    195         parent::initSession(); 
    196  
    197195        // セッションIDの受け渡しにクッキーを使用しない。 
    198196        ini_set('session.use_cookies', '0'); 
  • branches/version-2_13_3/data/require_base.php

    r23546 r23655  
    3838        SC_Utils_Ex::sfInitInstall(); 
    3939 
     40        // セッションハンドラ開始 
     41        $objSession = new SC_Helper_Session_Ex(); 
     42 
    4043        // セッション初期化・開始 
    4144        $sessionFactory = SC_SessionFactory_Ex::getInstance(); 
     
    4649         * 認証処理忘れ防止のため, LC_Page_Admin::init() 等ではなく, ここでチェックする. 
    4750         */ 
    48         SC_Helper_Session_Ex::adminAuthorization(); 
     51        $objSession->adminAuthorization(); 
    4952    } 
    5053} 
Note: See TracChangeset for help on using the changeset viewer.