mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-31 05:36:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			161 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| 
 | ||
| /**
 | ||
|  * AVE.cms
 | ||
|  *
 | ||
|  * @package AVE.cms
 | ||
|  * @version 3.x
 | ||
|  * @filesource
 | ||
|  * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
 | ||
|  *
 | ||
|  * @license GPL v.2
 | ||
|  */
 | ||
| 
 | ||
| class AVE_Session_DB
 | ||
| {
 | ||
| 
 | ||
| 	public $sess_lifetime;
 | ||
| 
 | ||
| 	/**
 | ||
| 	 * Хост
 | ||
| 	 *
 | ||
| 	 * @var string
 | ||
| 	 */
 | ||
| 	protected $db_host;
 | ||
| 
 | ||
| 	/**
 | ||
| 	 * Имя пользователя
 | ||
| 	 *
 | ||
| 	 * @var string
 | ||
| 	 */
 | ||
| 	protected $db_user;
 | ||
| 
 | ||
| 	/**
 | ||
| 	 * Пароль
 | ||
| 	 *
 | ||
| 	 * @var string
 | ||
| 	 */
 | ||
| 	protected $db_pass;
 | ||
| 
 | ||
| 	/**
 | ||
| 	 * Имя текущей БД.
 | ||
| 	 *
 | ||
| 	 * @var string
 | ||
| 	 */
 | ||
| 	protected $db_dbase;
 | ||
| 
 | ||
| 	/**
 | ||
| 	 * Префикс БД.
 | ||
| 	 *
 | ||
| 	 * @var string
 | ||
| 	 */
 | ||
| 	protected $db_prefix;
 | ||
| 
 | ||
| 	private $mysql_connect = null;
 | ||
| 	private $mysql_db = null;
 | ||
| 
 | ||
| 	/* Create a connection to a database */
 | ||
| 	function __construct()
 | ||
| 	{
 | ||
| 		// Подключаем конфигурационный файл с параметрами подключения
 | ||
| 		require (BASE_DIR . '/config/db.config.php');
 | ||
| 
 | ||
| 		$this->db_host = $config['dbhost'];
 | ||
| 		$this->db_user = $config['dbuser'];
 | ||
| 		$this->db_pass = $config['dbpass'];
 | ||
| 		$this->db_dbase = $config['dbname'];
 | ||
| 		$this->db_prefix = $config['dbpref'];
 | ||
| 
 | ||
| 		$this->sess_lifetime = (defined('SESSION_LIFETIME') && is_numeric(SESSION_LIFETIME))
 | ||
| 			? SESSION_LIFETIME
 | ||
| 			: (get_cfg_var("session.gc_maxlifetime") < 1440
 | ||
| 				? 1440
 | ||
| 				: get_cfg_var("session.gc_maxlifetime"));
 | ||
| 
 | ||
| 		if (! $this->mysql_connect = mysqli_connect ($this->db_host, $this->db_user, $this->db_pass))
 | ||
| 		{
 | ||
| 			$this->error();
 | ||
| 		}
 | ||
| 
 | ||
| 		if (! $this->mysql_db = mysqli_select_db ($this->mysql_connect, $this->db_dbase))
 | ||
| 		{
 | ||
| 			$this->error();
 | ||
| 		}
 | ||
| 
 | ||
| 		$this->mysql_connect->set_charset('utf8');
 | ||
| 
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 
 | ||
| 	/* Open session */
 | ||
| 	function _open($path, $name)
 | ||
| 	{
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 
 | ||
| 	/* Close session */
 | ||
| 	function _close()
 | ||
| 	{
 | ||
| 		@mysqli_query($this->mysql_connect, "DELETE FROM " . PREFIX . "_sessions WHERE expiry < '" . time() . "'");
 | ||
| 
 | ||
| 		if ($this->mysql_connect !== null)
 | ||
| 			@mysqli_close($this->mysql_connect);
 | ||
| 
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 
 | ||
| 	/* Read session */
 | ||
| 	function _read($ses_id)
 | ||
| 	{
 | ||
| 		$qid = @mysqli_query($this->mysql_connect, "SELECT value, Ip FROM " . PREFIX . "_sessions WHERE sesskey = '" . $ses_id . "' AND expiry > '" . time() . "'");
 | ||
| 
 | ||
| 		if ((list($value, $ip) = @mysqli_fetch_row($qid)) && $ip == $_SERVER['REMOTE_ADDR'])
 | ||
| 		{
 | ||
| 			return $value;
 | ||
| 		}
 | ||
| 
 | ||
| 		return '';
 | ||
| 	}
 | ||
| 
 | ||
| 	/* Write new data */
 | ||
| 	function _write($ses_id, $data)
 | ||
| 	{
 | ||
| 		if (! $qid = @mysqli_query($this->mysql_connect, "INSERT INTO ".PREFIX."_sessions VALUES ('".$ses_id."', ".(time()+$this->sess_lifetime).", '".addslashes($data)."', '".$_SERVER['REMOTE_ADDR']."', FROM_UNIXTIME(expiry, '%d.%m.%Y, %H:%i:%s'))"))
 | ||
| 		{
 | ||
| 			$qid = @mysqli_query($this->mysql_connect, "UPDATE ".PREFIX."_sessions SET expiry = ".(time()+$this->sess_lifetime).", expire_datum = FROM_UNIXTIME(expiry,'%d.%m.%Y, %H:%i:%s'), value = '".addslashes($data)."', Ip = '".$_SERVER['REMOTE_ADDR']."' WHERE sesskey = '".$ses_id."' AND expiry > '".time()."'");
 | ||
| 		}
 | ||
| 
 | ||
| 		return $qid;
 | ||
| 	}
 | ||
| 
 | ||
| 	/* Destroy session */
 | ||
| 	function _destroy($ses_id)
 | ||
| 	{
 | ||
| 		return @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE sesskey = '".$ses_id."'");
 | ||
| 	}
 | ||
| 
 | ||
| 	/* Garbage collection, deletes old sessions */
 | ||
| 	function _gc($maxlifetime)
 | ||
| 	{
 | ||
| 		$session_res = @mysqli_query($this->mysql_connect, "DELETE FROM ".PREFIX."_sessions WHERE expire < (UNIX_TIMESTAMP(NOW()) - " . (int)$maxlifetime . ")");
 | ||
| 
 | ||
| 		if (!$session_res) {
 | ||
| 			return false;
 | ||
| 		}
 | ||
| 		else
 | ||
| 		{
 | ||
| 			return true;
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	function error() {
 | ||
| 		ob_start();
 | ||
| 		header('HTTP/1.1 503 Service Temporarily Unavailable');
 | ||
| 		header('Status: 503 Service Temporarily Unavailable');
 | ||
| 		header('Retry-After: 3600');
 | ||
| 		header('X-Powered-By:');
 | ||
| 		display_notice("Error connect to MySQL.");
 | ||
| 		die;
 | ||
| 	}
 | ||
| }
 | ||
| ?>
 |