public function __construct($dblink) { //todo: detect link type if (Session::$instance == null) { Session::$link = $dblink; Session::emit('log', Session::$hook . ' ' . Session::$source . ' session handler started.'); switch (Session::$hook) { case 'php': Session::$read = false; Session::$sessionCookie = session_name(); session_set_save_handler(array(&$this, 'open'), array(&$this, 'close'), array(&$this, 'read'), array(&$this, 'write'), array(&$this, 'destroy'), array(&$this, 'gc')); register_shutdown_function('session_write_close'); session_set_cookie_params(time() + Session::$lifetime, '/', Session::$domain); @session_start(); $this->session_id = session_id(); if (!Session::$read) { throw 'session_start FAILED!'; } break; case 'custom': $this->session_id = WebApplication::getCookie(Session::$sessionCookie); $data = $this->read($this->session_id); if (!empty($this->session_id) && $data !== true && is_array($data)) { $this->internalValues = $data; } else { $this->session_id = sprintf('%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x', mt_rand(0, 0xffff) + (mt_rand(0, 0xffff) << 16), mt_rand(0, 0xffff), 4 << 12 | mt_rand(0, 0x1000), 1 << 7 | mt_rand(0, 128), mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); Session::emit('log', 'Initialized new Session ID[' . $this->session_id . ']'); WebApplication::setCookie(Session::$sessionCookie, $this->session_id); $this->internalValues = array(); } register_shutdown_function(array($this, 'shutdown')); break; } Session::$instance = $this; Session::set('last_access', date("Y-m-d H:i:s", time())); } else { throw new Exception('Session already created, only one session instance at a time!'); } }