- Timestamp:
- 2014/06/02 15:12:19 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_13-dev/data/class/SC_SessionFactory.php
r23492 r23493 86 86 public function initSession() 87 87 { 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'); 88 98 } 89 99 … … 95 105 public function useCookie() 96 106 { 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; 97 212 } 98 213 }
Note: See TracChangeset
for help on using the changeset viewer.
