/* vim: set ts=4 tw=0 sw=4 noet: */
require_once $CFG->root .'config.php';
-class Utils {
+class Utils implements Serializable {
private static $_instance = null;
private $server;
private $user;
private $is_admin;
private $loginStatus;
+ private $timeout;
private $header = '<!DOCTYPE html>
<html>
<head>
global $CFG;
$this->server = $_SERVER;
- session_start();
$this->user = null;
$this->is_admin = false;
$this->loginStatus = 'Not logged in';
+ $this->startSession();
+
if (isset($_SESSION['user'])) {
$this->user = $_SESSION['user'];
$this->loginStatus = 'OK';
}
$_SESSION['user'] = $this->user;
$_SESSION['is_admin'] = $this->is_admin;
+ $_SESSION['Utils'] = serialize($this);
}
private function __clone() {}
- public static function getInstance() {
- global $CFG;
+ public function serialize() {
+ file_put_contents('/tmp/dump', 'Serialize called: '.var_export($this, true), FILE_APPEND);
+ return serialize(get_object_vars($this));
+ }
- if (!is_object(self::$_instance)) {
- self::$_instance = new Utils();
+ public function unserialize($data) {
+ $values = unserialize($data);
+ foreach ($values as $key=>$value) {
+ $this->$key = $value;
}
- // Session timeout handler
- if ('' == session_id())
- session_start();
+ }
+
+ private function startSession() {
+ global $CFG;
+
if (isset($CFG->session_timeout)) {
- $timeout = $CFG->session_timeout * 60;
+ $this->timeout = $CFG->session_timeout * 60;
} else {
- $timeout = 20 * 60;
+ $this->timeout = 20 * 60;
+ }
+
+ if (ini_get('session.gc_maxlifetime') != $this->timeout)
+ ini_set('session.gc_maxlifetime', $this->timeout);
+ if (ini_get('session.cookie_lifetime') != $this->timeout)
+ ini_set('session.cookie_lifetime', $this->timeout);
+
+ session_start();
+
+ //echo ini_get('session.gc_maxlifetime').':'.ini_get('session.cookie_lifetime');
+ }
+
+ public static function getInstance() {
+ global $CFG;
+
+ if (!is_object(self::$_instance)) {
+ if (isset($_SESSION['Utils'])) {
+ self::$_instance = unserialize($_SESSION['Utils']);
+ file_put_contents('/tmp/dump', 'Unserialize called: '.var_export($this, true), FILE_APPEND);
+ } else {
+ self::$_instance = new Utils();
+ }
}
- if (ini_get('session.gc_maxlifetime') != $timeout)
- ini_set('session.gc_maxlifetime', $timeout);
- if (ini_get('session.cookie_lifetime') != $timeout)
- ini_set('session.cookie_lifetime', $timeout);
$time = $_SERVER['REQUEST_TIME'];
- if (isset($_SESSION['LAST_ACTIVITY']) && ($time - $_SESSION['LAST_ACTIVITY']) >= $timeout) {
+ if (isset($_SESSION['LAST_ACTIVITY']) &&
+ ($time - $_SESSION['LAST_ACTIVITY']) >= self::$_instance->timeout) {
+ echo 'R_TIME: '.date('c', $time).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']);
+ exit;
session_unset();
session_destroy();
- session_start();
self::$_instance->user = null;
self::$_instance->is_admin = false;
+ $_SESSION['Utils'] = serialize(self::$_instance);
+ } else {
+ $_SESSION['LAST_ACTIVITY'] = $time;
}
- $_SESSION['LAST_ACTIVITY'] = $time;
return self::$_instance;
}
$this->loginStatus = 'Connect to LDAP server failed';
}
+ $_SESSION['Utils'] = serialize($this);
+
return $result;
}
}
}
+ if ($loggedIn == false) {
+ echo '$this->user: '.$this->user.' $_SESSION[\'user\']: '.$_SESSION['user'];
+ echo 'R_TIME: '.date('c', $_SERVER['REQUEST_TIME']).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']);
+ exit;
+ }
+
+ $_SESSION['Utils'] = serialize($this);
+
return $loggedIn;
}
$this->header = str_replace('__TITLE__', $heading, $this->header);
$this->header = str_replace('__ROOT__', $CFG->wwwroot, $this->header);
$this->header = str_replace('__TIMEOUT__', $timeout, $this->header);
+
+ $_SESSION['Utils'] = serialize($this);
}
public function convertContent($code) {