165 lines
3.7 KiB
PHP
165 lines
3.7 KiB
PHP
<?php
|
|
|
|
class Session {
|
|
|
|
private $cookie;
|
|
|
|
private $db;
|
|
|
|
var $level = 0;
|
|
|
|
var $cookie_name;
|
|
|
|
var $values = array();
|
|
|
|
function clean()
|
|
{
|
|
global $config;
|
|
|
|
if($config['session']=='1')
|
|
{
|
|
$time = time()-$config['session_time'];
|
|
$ip = encode_ip();
|
|
$ipmax = $config['session_max'];
|
|
|
|
$table = $config['session_table'];
|
|
|
|
$this->db->connexion();
|
|
|
|
$this->db->query("DELETE FROM $table WHERE time < $time AND active = 1");
|
|
|
|
if($ipmax > 0) $this->db->query("DELETE FROM $table WHERE ip = (SELECT * FROM (SELECT ip FROM $table GROUP BY ip HAVING COUNT(ip) > $ipmax) AS tmp)");
|
|
|
|
$this->db->deconnexion();
|
|
}
|
|
}
|
|
|
|
function new_cookie()
|
|
{
|
|
global $config;
|
|
|
|
if($config['session']=='1')
|
|
{
|
|
$time = time();
|
|
|
|
$level = (is_int($this->level) && strlen($this->level) <= 2) ? $this->level : 0 ;
|
|
|
|
$sess_cookie = random(256);
|
|
$ip = encode_ip();
|
|
|
|
$this->cookie = $sess_cookie;
|
|
|
|
$table = $config['session_table'];
|
|
|
|
$this->db->connexion();
|
|
|
|
$this->db->escape($sess_cookie);
|
|
|
|
$this->db->query("INSERT INTO $table(session,time,ip,var,level,active) VALUES(0x$sess_cookie,$time,0x$ip,$level,0,1) ");
|
|
|
|
$this->db->deconnexion();
|
|
|
|
cookie((empty($this->cookie_name)?$config['session_name']:$this->cookie_name),base64_encode(hexstr($this->cookie)));
|
|
}
|
|
}
|
|
|
|
function load()
|
|
{
|
|
$this->db = new BDD();
|
|
|
|
$this->clean();
|
|
|
|
global $config;
|
|
|
|
if($config['session']=='1')
|
|
{
|
|
if(base64_decode(gpc($config['session_name'],'cookie')))
|
|
{
|
|
$cookie = strhex(base64_decode(gpc($config['session_name'],'cookie')));
|
|
$ip = encode_ip();
|
|
|
|
$table = $config['session_table'];
|
|
|
|
$this->db->connexion();
|
|
|
|
$this->db->escape($cookie);
|
|
|
|
$query = $this->db->unique_query("SELECT session,level,var FROM $table WHERE session= 0x$cookie AND ip= 0x$ip AND active=1");
|
|
|
|
$this->db->deconnexion();
|
|
|
|
if($this->db->num_rows == 1)
|
|
{
|
|
$this->cookie = strhex($query['session']);
|
|
$this->level = $query['level'];
|
|
if(!empty($query['var'])) $this->values = unserialize($query['var']);
|
|
|
|
$time = time();
|
|
|
|
$this->db->connexion();
|
|
|
|
$this->db->query("UPDATE $table SET time='$time' WHERE session= 0x$cookie");
|
|
|
|
$this->db->deconnexion();
|
|
|
|
cookie((empty($this->cookie_name)?$config['session_name']:$this->cookie_name),base64_encode(hexstr($this->cookie)));
|
|
}
|
|
else $this->new_cookie();
|
|
}
|
|
else $this->new_cookie();
|
|
}
|
|
|
|
}
|
|
|
|
function put($uid = NULL)
|
|
{
|
|
global $config;
|
|
|
|
if($config['session']=='1' && !empty($this->cookie))
|
|
{
|
|
$var = serialize($this->values);
|
|
|
|
$cookie = $this->cookie;
|
|
|
|
$uid = empty($uid) ? '0' : md5($uid);
|
|
|
|
$level = (is_numeric($this->level) && strlen($this->level) <= 2) ? $this->level : 0 ;
|
|
|
|
$table = $config['session_table'];
|
|
|
|
$this->db->connexion();
|
|
|
|
$this->db->escape($var);
|
|
|
|
if($uid != '0') $this->db->query("DELETE FROM $table WHERE uid = 0x$uid AND session != 0x$cookie AND active = 1");
|
|
|
|
$this->db->query("UPDATE $table SET var='$var', level='$level', uid= 0x$uid WHERE session= 0x$cookie");
|
|
|
|
$this->db->deconnexion();
|
|
}
|
|
}
|
|
|
|
function close()
|
|
{
|
|
global $config;
|
|
|
|
if($config['session']=='1' && !empty($this->cookie))
|
|
{
|
|
$cookie = $this->cookie;
|
|
|
|
$table = $config['session_table'];
|
|
|
|
$this->db->connexion();
|
|
|
|
$this->db->query("DELETE FROM $table WHERE session = 0x$cookie AND active = 1");
|
|
|
|
$this->db->deconnexion();
|
|
|
|
cookie((empty($this->cookie_name)?$config['session_name']:$this->cookie_name),'',time()-3600);
|
|
|
|
$this->values = array();
|
|
$this->level = 0;
|
|
}
|
|
}
|
|
}
|
|
?>
|