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/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) { 
Note: See TracChangeset for help on using the changeset viewer.