In der Datei z_sess_storageclass.php5
eine neue Klasse...class Session_Storage_DbMapper extends BaseDbMapper { public function __construct () { parent::__construct(); session_set_save_handler (array (&$this,'z_open'), array (&$this,'z_close'), array (&$this,'z_read'), array (&$this,'z_write'), array (&$this,'z_destroy'), array (&$this,'z_gc')); return true; } public function z_open ($sesspath, $sessname){ return true; } public function z_close (){ return true; } public function z_read ($sessid){ $sql = " SELECT var_php FROM z_session WHERE sessionid = '$sessid' "; $result = $this->base_query($sql); if ($ret = $result->fetch_assoc()) { $sql = " UPDATE z_session SET access_end = ".time()." WHERE sessionid = '$sessid' "; $this->base_query($sql); return $ret['var_php']; } else { return ""; } } public function z_write ($sessid, $var) { $sql = " INSERT INTO z_session (sessionid, var_php, access, variables) VALUES ('$sessid','$var',".time(). ", '".serialize($_SERVER)."') ON DUPLICATE KEY UPDATE var_php = '$var', access_end = ".time()." "; $this->base_query($sql); return true; } public function z_destroy ($sessid){ $sql = " SELECT * FROM z_session WHERE sessionid = '$sessid' "; $result = $this->base_query($sql); if ($row = $result->fetch_assoc()) { if ($row['access_end'] != '') { $hit = new HitDbMapper(); $hit->insert_Hit('tag_'.date("z",$row['access']), 'counter_gesamt',date("Y",$row['access'])); } $sql = " UPDATE z_session SET sessionid = NULL WHERE sessionid = '$sessid' "; $this->base_query($sql); } return true; } public function z_gc ($sesslt){ $sql = " LOCK TABLES z_session write "; $this->base_query($sql); $hit = new HitDbMapper(); $sql = " SELECT ord, access FROM z_session WHERE !isnull(sessionid) && !isnull(access_end) && access_end < ". (time()-600) ; if ($result = $this->base_real_query($sql)){ if ($res_store = $this->store_result()){ while ($row = $res_store->fetch_assoc()) { $sql = " UPDATE z_session SET sessionid = NULL WHERE ord = ".$row['ord'] ; $this->base_query($sql); $hit->insert_Hit('tag_'.date("z",$row['access']), 'counter_gesamt', date("Y",$row['access'])); } $res_store->free_result(); } } $sql = " DELETE FROM z_session WHERE (isnull(access_end) && access < ".(time()-600).") || access < ".(time()-2592000) ; $this->base_query($sql); $sql = " UNLOCK TABLES "; $this->base_query($sql); return true; } } |
| |