_userdata = $cookie; } @register_shutdown_function(array(&$this, '__setLocation')); } /********************************************* * gast oder member */ public function isGuest() { return (($this->_logindata === false) ? true : false); } /******************************************** * daten aus der session holen * @param $w (gast index || ref name) * @use * ermitteln ob mitglied oder gast: * if(!$session->isGuest()) //mitglied * else //gast * * für gäste: * print $session->get('username'); * * für mitglieder * $session->get('', $user); * print $user->username */ public function get($w) { return $this->_userdata[$w]; } public function fetchUser(&$userdata) { if($this->_logindata === false) $userdata = false; else $userdata = $this->_logindata; } /******************************************** * session starten/wiederaufnehmen, aber erst wenn location geladen wurde! * @param $db (ref obj. mc_Mysql) */ public function start(&$db) { global $location; //holt $location aus dem globalen kontext /********************************************* * alte sessionid übernehmen, oder neue ermitteln */ $sid = ((!empty($this->_cookie['session'])) ? $db->escape($this->_cookie['session']) : session_id()); $this->_session_id = $sid; $time = time(); if($this->_userdata === false) { //neuer gast if($db->num_rows(" select id from {$db->prefix}online where session = '{$sid}' ") == 0 ) { //kein eintrag mit session vorhanden $db->query(" insert into {$db->prefix}online ( userid, session, time, location_href, location_title ) values ( 0, '{$sid}', {$time}, '{$location['href']}', '{$location['title']}' ); "); $this->_userdata = array( 'username' => 'Gast', 'userid' => 0, 'password' => false, 'session' => $sid ); } $this->_set_cookie(); } else { //war schonmal hier $this->_login($db); //einloggen if($this->_logindata === false) { //kein mitglied $db->query(" update {$db->prefix}online set time = {$time}, location_href = '{$location['href']}', location_title = '{$location['title']}' where session = '{$sid}' "); } else { //registrierter user $db->query(" update {$db->prefix}online set time = {$time}, location_href = '{$location['href']}', location_title = '{$location['title']}', session = '{$sid}' where userid = {$this->_logindata->userid} "); } $this->_refresh_cookie(); } /******************************************** * alte sessions löschen */ $this->_dropOldSessions($db); } /************************************************* * überprüft die daten des cookies * @param $db (ref obj. mc_Mysql) */ protected function _login($db) { if(!empty($this->_userdata['username']) && !empty($this->_userdata['password'])) { //kein gast $query = $db->query(" select userid, username, keep_login as set_cookie from {$db->prefix}user where username = '{$db->escape($this->_userdata['username'])}' && password = sha1('{$db->escape($this->_userdata['password'])}') && active = 1 && blocked != 1 limit 1 "); if($db->num_rows($query) !== 0) { $this->_logindata = $db->fetch_object($query); } } } /************************************************* * löscht alte sessions aus der db * @param $db (ref obj. mc_Mysql) */ protected function _dropOldSessions(&$db) { global $mc; if($mc->config->session_timeout != 0) { $db->query(" delete from {$db->prefix}online where time <= (UNIX_TIMESTAMP() - {$mc->config->session_timeout}) "); } } /************************************************** * setzt einen cookie (gast) */ protected function _set_cookie() { setcookie( 'cc_board', '', time()+(60*60*1), '/', false, true ); } /********************************************* * setzt einen cookie (member) */ protected function _refresh_cookie() { if($this->_logindata->set_cookie != 0) { setcookie( 'cc_board', "{$this->_userdata['username']}|{$this->_userdata['password']}|". "{$this->_userdata['userid']}|".session_id(), time()+(60*60*1), '/', true, false ); } } /******************************************** * shutdown :: update der location */ public function __setLocation() { global $db, $location; if(gettype($db) != 'object') exit('

Abbruch! Hier stimmt was nicht!'); $db->query(" update {$db->prefix}online set location_href = '{$location['href']}', location_title = '{$location['title']}' where session = '{$this->_session_id}' "); } } ?>