Example #1
0
 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!');
     }
 }