Огромно забавяне

dakata__92

Super Moderator
Защо този клас забавя адски много страницата? Да знам, че има конекция към базата но може ли да оптимизираме кода?
PHP:
<?php

namespace system\session;

class Session{
	private $alive = true;
	private $dbc = NULL;
 
	public function __construct(){
		session_set_save_handler(
			array(&$this, 'open'),
			array(&$this, 'close'),
			array(&$this, 'read'),
			array(&$this, 'write'),
			array(&$this, 'destroy'),
			array(&$this, 'clean')
		);
		session_start();
	}
 
	public function __destruct(){
		if($this->alive){
			session_write_close();
			$this->alive = false;
		}
	}
 
	public function delete(){
		if(ini_get('session.use_cookies')){
			$params = session_get_cookie_params();
			setcookie(session_name(), '', time() - 42000,
				$params['path'], $params['domain'],
				$params['secure'], $params['httponly']
			);
		}
		session_destroy();
		$this->alive = false;
	}
 
	private function open(){	    
		$this->dbc = \system\core\SAL::getInstance()->db();
		return true;
	}
 
	private function close(){
		return $this->dbc->close();
	}
 
	private function read($sid){
		$q = "SELECT `data` FROM `sessions` WHERE `id` = '".$this->dbc->real_escape_string($sid)."' LIMIT 1";
		$r = $this->dbc->query($q);
 
		if($r->num_rows == 1){
			$fields = $r->fetch_assoc();
			return $fields['data'];
		}else{
			return '';
		}
	}
 
	private function write($sid, $data){
		$q = "REPLACE INTO `sessions` (`id`, `data`) VALUES ('".$this->dbc->real_escape_string($sid)."', '".$this->dbc->real_escape_string($data)."')";
		$this->dbc->query($q);
 
		return $this->dbc->affected_rows;
	}
 
	private function destroy($sid){
		$q = "DELETE FROM `sessions` WHERE `id` = '".$this->dbc->real_escape_string($sid)."'"; 
		$this->dbc->query($q);
 
		$_SESSION = array();
 
		return $this->dbc->affected_rows;
	}
 
	private function clean($expire){
		$q = "DELETE FROM `sessions` WHERE DATE_ADD(`last_accessed`, INTERVAL ".(int) $expire." SECOND) < NOW()"; 
		$this->dbc->query($q);
 
		return $this->dbc->affected_rows;
	}
}
 
Целта ти е да ползваш $_SESSION? Защо не работиш със сесиите през твои си класове? По този начин ще можеш да имаш различни имплементации на сесиите - база данни, нейтив, или който каквито иска. :roll:
 
djman каза:
Целта ти е да ползваш $_SESSION? Защо не работиш със сесиите през твои си класове? По този начин ще можеш да имаш различни имплементации на сесиите - база данни, нейтив, или който каквито иска. :roll:
Принципно в момента желая да си напиша една системка която да ми сменя нещата. Ако реша да ползвам Nativ няма да има никакъв проблем като просто сменя някъде кода за обработка и просто добавя по дефаут да се записват в базата. Проблема е, че ми се струва, че нещата тук са как да кажа много несигурни... Явно самото сменяне на хендлъра товари доста. Тук даже незнам, след колко време ще се изтрие старият запис от базата... time()-42000 защо точно е така незнам но ще си каже.
 

Back
Горе