Changeset 23493
- Timestamp:
- 2014/06/02 15:12:19 (10 years ago)
- Location:
- branches/version-2_13-dev/data
- Files:
-
- 6 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 } -
branches/version-2_13-dev/data/class/helper/SC_Helper_Mobile.php
r23124 r23493 171 171 172 172 // セッションIDの存在をチェックする。 173 $ objSession = new SC_Helper_Session_Ex();174 if ($ objSession->sfSessRead($sessionId) === null) {173 $sessionFactory = SC_SessionFactory_Ex::getInstance(); 174 if ($sessionFactory->sfSessRead($sessionId) === null) { 175 175 GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId"); 176 176 -
branches/version-2_13-dev/data/class/helper/SC_Helper_Session.php
r23492 r23493 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 セッションが正常に開始された場合 true45 */46 public function sfSessOpen($save_path, $session_name)47 {48 return true;49 }50 51 /**52 * セッションを閉じる.53 *54 * @return bool セッションが正常に終了した場合 true55 */56 public function sfSessClose()57 {58 return true;59 }60 61 /**62 * セッションのデータをDBから読み込む.63 *64 * @param string $id セッションID65 * @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 セッションID82 * @param string $sess_data セッションデータの値83 * @return bool セッションの書き込みに成功した場合 true84 */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 セッションID115 * @return bool セッションを正常に破棄した場合 true116 */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 143 17 /** 144 18 * トランザクショントークンを生成し, 取得する. … … 226 100 * @return void 227 101 */ 228 public function adminAuthorization()102 public static function adminAuthorization() 229 103 { 230 104 if (($script_path = realpath($_SERVER['SCRIPT_FILENAME'])) !== FALSE) { -
branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseCookie.php
r23124 r23493 44 44 public function initSession() 45 45 { 46 parent::initSession(); 47 46 48 ini_set('session.cache_limiter', 'none'); 47 49 // (session.auto_start などで)セッションが開始されていた場合に備えて閉じる。(FIXME: 保存する必要はない。破棄で良い。) -
branches/version-2_13-dev/data/class/sessionfactory/SC_SessionFactory_UseRequest.php
r23256 r23493 35 35 class SC_SessionFactory_UseRequest extends SC_SessionFactory_Ex 36 36 { 37 /** @var LC_UseRequest_State_Mobile|LC_UseRequest_State_PC */ 37 38 public $state = null; 38 39 … … 176 177 177 178 // セッションIDの存在をチェックする。 178 $objSession = new SC_Helper_Session_Ex(); 179 if ($objSession->sfSessRead($sessionId) === null) { 179 if ($this->sfSessRead($sessionId) === null) { 180 180 GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId"); 181 181 … … 193 193 public function initSession() 194 194 { 195 parent::initSession(); 196 195 197 // セッションIDの受け渡しにクッキーを使用しない。 196 198 ini_set('session.use_cookies', '0'); -
branches/version-2_13-dev/data/require_base.php
r22206 r23493 38 38 SC_Utils_Ex::sfInitInstall(); 39 39 40 // セッションハンドラ開始41 $objSession = new SC_Helper_Session_Ex();42 43 40 // セッション初期化・開始 44 41 $sessionFactory = SC_SessionFactory_Ex::getInstance(); … … 49 46 * 認証処理忘れ防止のため, LC_Page_Admin::init() 等ではなく, ここでチェックする. 50 47 */ 51 $objSession->adminAuthorization();48 SC_Helper_Session_Ex::adminAuthorization(); 52 49 } 53 50 }
Note: See TracChangeset
for help on using the changeset viewer.