Bontiv-Sourceer source code viewer
Root | Help
./PhpMyCMS/inc/session.php
<?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;
    }
}

?>
Presented with Bontiv-Sourceer