dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
Loading...
Searching...
No Matches
dbxSession.class.php
Go to the documentation of this file.
1<?php
2
6class dbxSession {
7
8 Private function get_request() {
9 $request='';
10 if (isset($_SERVER['REQUEST_URI'])) $request=$_SERVER['REQUEST_URI'] ;
11 return $request;
12 }
13
14
15 Private function get_new_session_id($uid) {
16 $s1=microtime(true);
17 $s2=dbx()->new_password(8);
18 $sid=md5($uid.'|'.$s1.'|'.$s2);
19 $sid=substr($sid, 0, 32);
20 return $sid;
21 }
22
23 Private function get_new_session($uid) {
24 $config=dbx()->get_config('dbx');
25 $cookie=0; if (count($_COOKIE)>0) $cookie=1;
26 $oBrowser =dbx()->get_system_obj('dbxBrowser');
27 $sid=$this->get_new_session_id($uid);
28 dbx()->debug("#dbxSession new sessid for user($uid) =($sid)");
29
30 $session['record']['id'] = 0;
31 $session['record']['create_date'] = date('Y-m-d H:i:s');
32 $session['record']['create_uid'] = $uid;
33 $session['record']['update_date'] = date('Y-m-d H:i:s');
34 $session['record']['update_uid'] = $uid;
35 $session['record']['owner'] = $uid;
36 $session['record']['ip'] = $oBrowser->_ip;
37 $session['record']['host'] = $oBrowser->_host;
38 $session['record']['device']= $oBrowser->_device;
39 $session['record']['robot'] = $oBrowser->_robot;
40 $session['record']['name'] = $oBrowser->_name;
41 $session['record']['ver'] = $oBrowser->_version;
42 $session['record']['os'] = $oBrowser->_platform;
43 $session['record']['width'] = $oBrowser->_width;
44 $session['record']['height']= $oBrowser->_height;
45 $session['record']['cookie']= $cookie;
46 $session['record']['userid']= $uid;
47 $session['record']['sessid']= $sid;
48
49 $session['record']['request_counter']= '0';
50 $session['record']['request_last'] = '';
51 $session['record']['request_current']= '';
52
53 $session['current_user']=$this->get_current_user($uid);
54 $session['tmp']=array();
55 $session['remember']=array();
56 $session['cache']['tpl']=array();
57 $session['cache']['obj']=array();
58
59 // - - - - - - - - - - -
60
61
62 return $session;
63 }
64
65
66
67 private function apply_browser_to_record(&$rec) {
68 $oBrowser = dbx()->get_system_obj('dbxBrowser');
69
70 $rec['ip'] = $oBrowser->_ip;
71 $rec['host'] = $oBrowser->_host;
72 $rec['device'] = $oBrowser->_device;
73 $rec['mobile'] = $oBrowser->_mobile;
74 $rec['robot'] = $oBrowser->_robot;
75 $rec['name'] = $oBrowser->_name;
76 $rec['ver'] = $oBrowser->_version;
77 $rec['os'] = $oBrowser->_platform;
78 $rec['width'] = $oBrowser->_width;
79 $rec['height'] = $oBrowser->_height;
80 $rec['cookie'] = count($_COOKIE)>0 ? 1 : 0;
81 }
82
83
84
85 public function get_current_user($uid = 0) {
86 // #todo cfg ob user 1 (guest) db oder nicht !
87 $current_user = [
88 'id' => 0,
89 'uname' => 'guest',
90 'roles' => 'guest',
91 'email' => '',
92 'name' => 'Guest',
93 'design' => 'default',
94 'color' => 'default',
95 'language' => 'de',
96 'edit' => 0
97 ];
98
99 if ($uid) {
100 $db = dbx()->get_system_obj('dbxDB');
101 $user_rec = $db->select1('dbxUser', $uid , verify_access: 0);
102
103 if (!is_array($user_rec) || empty($user_rec['id'])) {
104 $user_rec = array();
105 }
106
107 if (is_array($user_rec) && !empty($user_rec['id'])) {
108 $current_user = [
109 'id' => (int)$user_rec['id'],
110 'uname' => $user_rec['uname'],
111 'roles' => $user_rec['roles'],
112 'email' => $user_rec['email'],
113 'name' => $user_rec['name'],
114 'design' => $user_rec['design'],
115 'color' => $user_rec['color'],
116 'language' => $user_rec['language'],
117 'edit' => $user_rec['edit']
118 ];
119 }
120 }
121
122 dbx()->debug("###CURRENT-USER###", $current_user);
123 return $current_user;
124}
125
126
127
132 public function load_session() {
133 dbx()->timer('session-browser','Session browser');
134 $sok=false;
135 $oBrowser=dbx()->get_system_obj('dbxBrowser');
136 $ip = $oBrowser->_ip;
137 $host= $oBrowser->_host;
138 if (isset($_SESSION['dbx']['record'])) {
139 if (isset($_SESSION['dbx']['current_user']['id'])) {
140 $sok=1;
141 if ($_SESSION['dbx']['record']['ip'] != $ip ) $sok=false;
142 if ($_SESSION['dbx']['record']['host'] != $host) $sok=false;
143 }
144 }
145
146
147 if (!$sok) {
148 dbx()->timer('session-new','Session create new');
149 $_SESSION['dbx'] =$this->get_new_session(0);
150 dbx()->debug("#### Create new session #### ");
151 dbx()->timer('session-new');
152 }
153 $this->clean_session();
154
155
156
157 dbx()->timer('session-browser');
158 }
159 public function clean_session() {
160 $cache = dbx()->get_config('dbx','cache');
161 //$cache2 = dbx()->get_system_var('dbx_cache',0);
162 //dbx_debug("##clear session cache=($cache)");
163 $_SESSION['dbx']['tmp'] =array();
164 $_SESSION['dbx']['norep']=array();
165 if (!$cache) {
166 //dbx_debug("clear cache config");
167 $_SESSION['dbx']['config']=array();
168 $_SESSION['dbx']['cache']=array();
169 }
170 }
171
172 public function save_session($rec=1) {
173 $session_db=dbx()->get_config('dbx','session_db');
174 dbx()->debug("#SESSION db write =($session_db)");
175 if ($session_db) {
176
177
178 $install=dbx()->get_system_var('dbx_install',0);
179
180 $design =dbx()->get_system_var('dbx_activ_design','default');
181 $page =dbx()->get_system_var('dbx_activ_page','default');
182
183 $modul =dbx()->get_system_var('dbx_master_modul');
184 $run1 =dbx()->get_system_var('dbx_master_action');
185 $run2 =dbx()->get_system_var('dbx_run2', '');
186 $uid =dbx()->user();
187
188
189 if (isset($_SESSION['dbx']['record'])) {
190 $_SESSION['dbx']['record']['request_counter'] = ((int)($_SESSION['dbx']['record']['request_counter'] ?? 0)) + 1;
191 $_SESSION['dbx']['record']['request_last'] = (string)($_SESSION['dbx']['record']['request_current'] ?? '');
192 $_SESSION['dbx']['record']['request_current'] = $this->get_request();
193 $rec=$_SESSION['dbx']['record'];
194 $id =(int)($rec['id'] ?? 0);
195 } else {
196 $rec=array();
197 $id = 0;
198 }
199
200 //$this->apply_browser_to_record($rec);
201
202 $rec['update_date']=date('Y-m-d H:i:s');
203 $rec['create_uid'] =$uid;
204 $rec['update_uid'] =$uid;
205 $rec['owner'] =$uid;
206 $rec['userid'] =$uid;
207 $rec['design'] =$design;
208 $rec['page'] =$page;
209 $rec['modul'] =$modul;
210 $rec['run1'] =$run1;
211 $rec['run2'] =$run2;
212 $rec['color'] =dbx()->get_system_var('dbx_color','default');
213 $rec['language'] =dbx()->get_system_var('dbx_lng' ,'de');
214 $rec['edit'] =dbx()->get_system_var('dbx_edit' ,'0');
215
216
217
218 if (!$install && $session_db) {
219 $oDB=dbx()->get_system_obj('dbxDB');
220
221 //dbx_debug("#### SESSION SAVE ID=($id) User=($uid) rec=($id) #####",$rec);
222
223 $sessid = (string)($rec['sessid'] ?? '');
224
225 if ($id) {
226 $ok=$oDB->update('dbxSession',$rec,$id,0,1,0,0);
227 if (!$ok) {
228 $id=0;
229 } elseif ((int)($oDB->_update_count ?? 0) === 0 && (int)$oDB->count('dbxSession', "id=" . (int)$id) <= 0) {
230 $id=0;
231 }
232 }
233
234 if (!$id && $sessid !== '') {
235 $server = $oDB->get_dd_server('dbxSession');
236 $where = "sessid='" . $oDB->escape($sessid, $server) . "'";
237 $old = $oDB->select1('dbxSession', $where, array('id'), 0);
238 $oldId = is_array($old) ? (int)($old['id'] ?? 0) : 0;
239
240 if ($oldId > 0) {
241 $ok=$oDB->update('dbxSession',$rec,$oldId,0,1,0,0);
242 if ($ok) $id=$oldId;
243 }
244 }
245
246 if (!$id) { // new session
247 $ok=$oDB->insert('dbxSession',$rec,0,1,0,0);
248 $id=(int)$oDB->_insert_id;
249 }
250 }
251
252 $rec['id'] = (int)$id;
253 $_SESSION['dbx']['record']=$rec;
254 dbx()->debug("#SESSIOM-PHP-ID",$_SESSION['dbx']['record']['id']);
255 } // session_db
256 }
257
258
259
260 public function logout($userid,$kill=1) {
261 dbx()->debug("#SESSION# LOGOUT Kill=($kill) userid=($userid)");
262
263 if (isset($_SESSION['dbx']['record'])) {
264 $_SESSION['dbx']['record']['owner'] = 0;
265 $_SESSION['dbx']['record']['userid'] = 0;
266 }
267 $_SESSION['dbx']['current_user']=$this->get_current_user(0);
268
269 if ($kill) $GLOBALS['dbx_session_destroy_pending'] = 1;
270 }
271
272 public function destroy_php_session() {
273 $GLOBALS['dbx_session_destroyed'] = 1;
274
275 if (session_status() === PHP_SESSION_ACTIVE) {
276 $_SESSION = array();
277
278 if (ini_get('session.use_cookies')) {
279 $params = session_get_cookie_params();
280 setcookie(
281 session_name(),
282 '',
283 time() - 42000,
284 $params['path'] ?? '/',
285 $params['domain'] ?? '',
286 $params['secure'] ?? false,
287 $params['httponly'] ?? false
288 );
289 }
290
291 session_destroy();
292 }
293
294 dbx_delete_cookie('dbXwebApp');
295 }
296
297 public function login($uid,$remember=0) {
298 dbx()->debug("#SESSION# LOGIN");
299 if (session_status() === PHP_SESSION_ACTIVE && !headers_sent()) {
300 session_regenerate_id(true);
301 }
302 $new_sessid =$this->get_new_session_id($uid);
303 $current_user=$this->get_current_user($uid);
304 $_SESSION['dbx']['record']['owner'] = $uid;
305 $_SESSION['dbx']['record']['userid'] = $uid;
306 $_SESSION['dbx']['record']['update_uid'] = $uid;
307 $_SESSION['dbx']['record']['create_uid'] = $uid;
308 $_SESSION['dbx']['record']['sessid'] = $new_sessid;
309 $_SESSION['dbx']['current_user'] = $current_user;
310 //$_SESSION=array();
311 if ($remember) dbx()->set_cookie_var('dbXwebApp','session_id',$new_sessid); // #ToDo
312 dbx()->debug("#SESSION# LOGIN ($uid) Sessid=($new_sessid)",);
313
314 }
315
316
317} // Class
Summary of dbxSession.
Private get_request()
Private get_new_session($uid)
login($uid, $remember=0)
logout($userid, $kill=1)
get_current_user($uid=0)
load_session()
Summary of load_session.
Private get_new_session_id($uid)
$config['version']
Definition config.php:2
DBX schema administration.
$_SERVER['REQUEST_URI']