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

#2565 r23491 r23493 をリバート

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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} 
Note: See TracChangeset for help on using the changeset viewer.