<?php
/**
* Session
*
* @version $Id$
* @copyright 2009
*/
require_once "sql.php";
require_once "UrlAnalyse.php";
class session {
static public $vars = array();
protected $sessid;
protected $sql;
protected $user;
static $object = NULL;
static function Open(){
if (self::$object === NULL) {
self::$object = new self();
return self::$object;
} else {
return self::$object;
}
}
function __construct(){
$this->sql = DB_Driver::Open();
$this->sql->table = 'session';
$this->sessid = $this->GetSessID();
if ($this->sessid != '' && $this->Auth()) {
$this->OpenSess();
}else{
$this->CreateSess();
}
}
private function OpenSess(){
$this->sql->table = 'session';
$this->sql->Update(array(
'request' => $_SERVER['QUERY_STRING'],
'date' => time()),
array(
'sessid' => $this->sessid
));
$result = $this->sql->Select(array('sessid' => $this->sessid), array('var', 'user'));
$result = mysql_result($result, 0, 'var');
$result = explode('/', $result);
$key = explode(';', $result[0]);
$var = explode(';', @$result[1]);
self::$vars = array_combine($key, $var);
}
private function CreateSess(){
$this->sql->table = 'session';
$this->sessid = $this->CreateSessID();
setcookie('sessid', $this->sessid);
$this->sql->InsertInto(array(
'sessid' => $this->sessid,
'ip' => $_SERVER['REMOTE_ADDR'],
'useragent' => $_SERVER['HTTP_USER_AGENT'],
'user' => 0,
'request' => $_SERVER['QUERY_STRING'],
'var' => '/',
'date' => time()
));
if (method_exists('page', 'UrlSet')) {
page::UrlSet('sessid', $this->sessid);
}
}
public function Auth(){
$this->sql->table = 'session';
$sess = $this->sql->Select(array(
'sessid' => $this->sessid,
'ip' => $_SERVER['REMOTE_ADDR'],
'useragent' => $_SERVER['HTTP_USER_AGENT']
));
if (mysql_num_rows($sess) == 0) {
return false;}
else {return true;}
}
public function GetSessID(){
$url = URL_Analyser::Open();
if ($url->GetVar('sessid')) {
if ((!isset($_COOKIE['sessid']) || !$_COOKIE['sessid']) && method_exists('page', 'UrlSet')) {
page::UrlSet('sessid', $this->sessid);
}
return $url->GetVar('sessid');
} elseif (isset($_COOKIE['sessid']) && $_COOKIE['sessid']) {
return $_COOKIE['sessid'];
} else {
return false;
}
}
public function CreateSessID(){
return hash('sha256', microtime().rand().uniqid());
}
protected function DeleteOldSess(){
$this->sql->table = 'session';
$this->sql->DeleteFrom('`date`<\''.(time()-1600).'\'');
}
static function GetVar($var, $default = NULL){
return (isset(self::$vars[$var]))?(self::$vars[$var]):($default);
}
static function SetVar($var, $value){
$sess = self::Open();
$value = str_replace(';', '', $value);
$value = str_replace('/', '', $value);
$var = str_replace(';', '', $var);
$var = str_replace('/', '', $var);
self::$vars[$var]=$value;
}
public function RecVar(){
$this->sql->table = 'session';
$key = array_keys(self::$vars);
$var = array_values(self::$vars);
$key = implode(';', $key);
$var = implode(';', $var);
$var = $key.'/'.$var;
$this->sql->update(array(
'var' => $var
),array(
'sessid' => $this->sessid
));
}
static function ID(){
return self::$object->sessid;
}
}
?>