- Timestamp:
- 2014/10/14 12:07:56 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_13_3/data/class/helper/SC_Helper_Session.php
r23546 r23655 15 15 class SC_Helper_Session 16 16 { 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 17 143 /** 18 144 * トランザクショントークンを生成し, 取得する. … … 122 248 SC_Utils_Ex::sfIsSuccess(new SC_Session_Ex()); 123 249 } 124 125 /**126 * セッションIDを新しいIDに書き換える127 *128 * @return bool129 */130 public static function regenerateSID()131 {132 return session_regenerate_id(true);133 }134 250 }
Note: See TracChangeset
for help on using the changeset viewer.