You Are Here : /var/www/virtual/tvarditsa.org/classes/ |
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 ?>