LONTE SHELL EDITION


Dashboard -*- SHOW INFO -*- HASH identify -*- Config -*- Jumping

You Are Here : /var/www/virtual/tvarditsa.org/classes/
Upload File :
Current File : /var/www/virtual/tvarditsa.org/classes/session.class.php

<?php // _$_ session.class.php _ session management _ version 3.0.7 _ valio _$_ //
if (!defined("_SESSION_CLASS_")) {
define("_SESSION_CLASS_", 1);

// ----  Auto Include  ---- //

$this_dir = dirname(__FILE__);
if (!defined("_ADODB_CLASS_")) {
  include ($this_dir . DIRECTORY_SEPARATOR . 'adodb.class.php');
}

// --  Class Definition  -- //

  class Session {

    var $_cfg = array (
	  'status_tbl'	=> 'sessions_status',
	  'offline_time'=> 2592000,
	  'cookie_name'	=> 'vsitesession',
	  'method'		=> 'new',
	);
	
	var $_db = null;
	
    var $_status = 0; // 0 = offline, 1 = online //
	var $_SID = '';
	var $_login = '';
	var $_sessioninfo = null;
	var $_sessvar = 'session_var_';

// ----  Constructor   ---- //

    function Session () {
      $this->__construct();
    }

    function __construct() {
	  $c = new VsiteConf();
	  $this->_cfg = $c->read_conf ('session', $this->_cfg);
	  $this->_db = new ADODB();
      $this->start();
    }

// ---  Public Methods  --- //

    function start () {
	  $this->_sessioninfo = session_get_cookie_params ();
	  $this->_sessioninfo['autostart'] = ini_get('session.auto_start');
	  $this->_login = '';
      $this->_SID = '';
      $this->_status = 0;
	  if (!$this->_sessioninfo['autostart']) session_start();
	  if ($this->_cfg['method'] != 'old') session_register($this->_sessvar.'test');
	  $this->_SID = session_id();
	  $is_auth = $this->get_var ('is_auth');
	  if ($is_auth != '') {
		$this->_login = $is_auth;
		$this->_status = 1;
		setcookie ($this->_cfg['cookie_name'], $this->_login,
		  time() + $this->_cfg['offline_time']);
	  } else if (isset($_COOKIE[$this->_cfg['cookie_name']])) {
		$this->_login = $_COOKIE[$this->_cfg['cookie_name']];
		$this->_status = 0;
		setcookie ($this->_cfg['cookie_name'], $this->_login,
		  time() + $this->_cfg['offline_time']);
	  }
	  $this->_register_session();
    }

	function set_login ($login) {
	  $this->_status = 1;
	  $this->_login = $login;
	  $this->register ('is_auth', $this->_login);
	  setcookie ($this->_cfg['cookie_name'], $this->_login,
		time() + $this->_cfg['offline_time']);
      $this->_register_session();
	}

	function get_login ($authonly = true) {
	  if (($this->_status == 0) && $authonly) return null;
	  else return $this->_login;
	}

	function get_var ($name) {
	  if (($this->_cfg['method'] == 'old') &&
	    session_is_registered($this->_sessvar.$name))
		  return $GLOBALS[$this->_sessvar.$name];
	  if (isset($_SESSION[$name]))
	    return $_SESSION[$name];
	}

	function register ($name, $val = '::=::GETFROMGLOBAL::=::') {
	  if ($val == '::=::GETFROMGLOBAL::=::') $val = $GLOBALS[$name];
	  if ($this->_cfg['method'] == 'old') {
	    if (!session_is_registered($this->_sessvar.$name))
	      session_register($this->_sessvar.$name);
	    $GLOBALS[$this->_sessvar.$name] = $val;
	  } else $_SESSION[$name] = $val;
	}

	function is_registered ($name) {
	  if (($this->_cfg['method'] == 'old') &&
	    session_is_registered($this->_sessvar.$name))
		  return true;
	  elseif (isset($_SESSION[$name])) return true;
	  return false;
	}

	function unregister ($name) {
	  if (($this->_cfg['method'] == 'old') &&
	    session_is_registered($this->_sessvar.$name)) {
	      $GLOBALS[$this->_sessvar.$name] = '';
	      session_unregister($this->_sessvar.$name);
	  }
	  $_SESSION[$name] = '';
	  unset($_SESSION[$name]);
	}

	function destroy () {
	  $this->_status = 0;
	  $this->unregister ('is_auth');
	  //session_destroy();
      $this->_register_session();
	}

    // Session User Info //

	function is_auth () {
	  if ($this->_status == 1) return true;
	  return false;
	}

	function online_users ($activity_time = 0) {
	  if ($activity_time == 0) $activity_time = $this->_sessioninfo['lifetime'];
	  $sql = 'SELECT *, COUNT(*) as counter FROM ';
	  $sql .= $this->_cfg['status_tbl'];
	  $sql .= ' WHERE last_time >= DATE_SUB(NOW(), INTERVAL '.(int)$activity_time;
	  $sql .= ' SECOND) GROUP BY login';
	  $online = array();
	  $rs = &$this->_db->Execute($sql);
	  while ($rs && !$rs->EOF) {
	    $online[] = $rs->fields;
		$rs->MoveNext();
	  }
	  return $online;
	}

	function count_users ($activity_time = 0) {
	  if ($activity_time == 0) $activity_time = $this->_sessioninfo['lifetime'];
	  $sql = 'SELECT COUNT(*) as counter FROM ';
	  $sql .= $this->_cfg['status_tbl'];
	  $sql .= ' WHERE last_time >= DATE_SUB(NOW(), INTERVAL ';
	  $sql .= (int)$activity_time.' SECOND)';
	  $rs = &$this->_db->Execute($sql);
	  if ($rs && !$rs->EOF) return (int)$rs->fields['counter'];
	  return 0;
	}

// --  Private Methods   -- //

    function _register_session () {
	  if ($this->_SID) {
		$ipaddress = $_SERVER["REMOTE_ADDR"];
		if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
		  $ipaddress .= "/".$_SERVER["HTTP_X_FORWARDED_FOR"];
		$browser = $_SERVER["HTTP_USER_AGENT"];
	    $sql = 'SELECT * FROM '.$this->_cfg['status_tbl'];
		$sql .= ' WHERE sid='.$this->_db->qstr($this->_SID);
	  	$rs = $this->_db->Execute($sql);
		if ($rs && !$rs->EOF) {
		  $login = '';
		  if ($this->_status == 1) $login = $this->_login;
		  // resume session
		  $sql = 'REPLACE INTO '.$this->_cfg['status_tbl'];
		  $sql .= ' (sid, login, start_time, last_time, ip_address, browser)';
		  $sql .= ' VALUES ('.$this->_db->qstr($this->_SID).', ';
		  $sql .= $this->_db->qstr($login).', ';
		  $sql .= $this->_db->qstr($rs->fields['start_time']).', NOW(),  ';
		  $sql .= $this->_db->qstr($ipaddress).', '.$this->_db->qstr($browser).')';
		  $rs = $this->_db->Execute($sql);
		} else {
		  // first remove old sessions
		  $sql = 'DELETE FROM '.$this->_cfg['status_tbl'];
		  $sql .= ' WHERE last_time < DATE_SUB(NOW(), INTERVAL ';
		  $sql .= $this->_sessioninfo['lifetime'].' SECOND)';
		  $rs = $this->_db->Execute($sql);
		  // add session
		  $sql = 'INSERT INTO '.$this->_cfg['status_tbl'];
		  $sql .= ' (sid, login, start_time, last_time, ip_address, browser)';
		  $sql .= ' VALUES ('.$this->_db->qstr($this->_SID).', ';
		  $sql .= $this->_db->qstr($this->_login).', ';
          $sql .= 'NOW(), NOW(), ';
		  $sql .= $this->_db->qstr($ipaddress).', '.$this->_db->qstr($browser).')';
		  $rs = $this->_db->Execute($sql);
		}
	  }
    }

// -----  Destructor  ----- //

	function __destruct() {
	}

  }

} // END SESSION_CLASS
?>