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

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

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

File:
1 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} 
Note: See TracChangeset for help on using the changeset viewer.