AVE.CMS v3.28
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
2.7 KiB

8 years ago
<?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
{
public $sess_lifetime;
function __construct()
{
ini_set('session.save_handler', 'user');
$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"));
return true;
}
/* Open session */
function _open($sess_save_path, $session_name)
{
global $sess_save_path, $sess_session_name;
$sess_save_path = BASE_DIR . '/session';
$sess_session_name = $session_name;
return true;
}
/* Close session */
function _close()
{
$this->_gc($this->sess_lifetime);
return true;
}
/* Read session */
function _read($id)
{
global $sess_save_path, $sess_session_name, $sess_session_id;
$sess_session_id = $id;
$sess_file = $this->_folder() . '/' . $id . '.sess';
if (!file_exists($sess_file)) return "";
if ($fp = @fopen($sess_file, "r"))
{
$sess_data = fread($fp, filesize($sess_file));
return($sess_data);
}
else
{
return '';
}
}
/* Write new data */
function _write ($id, $sess_data)
{
global $sess_save_path, $sess_session_name, $sess_session_id;
$sess_session_id = $id;
$sess_file = $this->_folder() . '/' . $id . '.sess';
if(!file_exists($this->_folder()))
mkdir($this->_folder(), 0777, true);
if ($fp = @fopen($sess_file, "w"))
{
return fwrite($fp, $sess_data);
}
else
{
return false;
}
}
/* Destroy session */
function _destroy ($id)
{
global $sess_save_path, $sess_session_name, $sess_session_id;
$sess_session_id = $id;
$sess_dir = $this->_folder();
$sess_file = $sess_dir . '/' . $id . '.sess';
return @unlink($sess_file);
}
/* Garbage collection, deletes old sessions */
function _gc ($maxlifetime)
{
global $sess_save_path, $sess_session_id;
$this->_clear($sess_save_path, 'sess', $maxlifetime);
return true;
}
function _clear($dir, $mask, $maxlifetime)
{
foreach(glob($dir . '/*') as $filename) {
if(strtolower(substr($filename, strlen($filename) - strlen($mask), strlen($mask))) == strtolower($mask)) {
if((filemtime($filename) + $maxlifetime) < time())
@unlink($filename);
}
if(is_dir($filename))
if (!count(glob($filename.'/*'))) @rmdir($filename);
self::_clear($filename, $mask, $maxlifetime);
}
}
function _folder()
{
global $sess_session_id, $sess_save_path;
return $sess_save_path . '/' . mb_substr($sess_session_id, 0, 3);
}
function __destruct ()
{
register_shutdown_function('session_write_close');
}
}
?>