Changeset 23493


Ignore:
Timestamp:
2014/06/02 15:12:19 (10 years ago)
Author:
pineray
Message:

#2565 セッションに関するクラスや関数を整理

セッションハンドラの登録をファクトリーへ移動.

Location:
branches/version-2_13-dev/data
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/class/SC_SessionFactory.php

    r23492 r23493  
    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'); 
    8898    } 
    8999 
     
    95105    public function useCookie() 
    96106    { 
     107    } 
     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; 
    97212    } 
    98213} 
  • branches/version-2_13-dev/data/class/helper/SC_Helper_Mobile.php

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

    r23492 r23493  
    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  
    14317    /** 
    14418     * トランザクショントークンを生成し, 取得する. 
     
    226100     * @return void 
    227101     */ 
    228     public function adminAuthorization() 
     102    public static function adminAuthorization() 
    229103    { 
    230104        if (($script_path = realpath($_SERVER['SCRIPT_FILENAME'])) !== FALSE) { 
  • branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php

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

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

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