Advertisement
Guest User

Untitled

a guest
Jan 16th, 2012
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.96 KB | None | 0 0
  1. <?php
  2. class DbSession
  3. {
  4.     private static $_instance;
  5.    
  6.     protected static function log($t) {
  7.         $file = fopen('session.log', 'a+');
  8.         fwrite($file, date('d.m.Y H:i:s ') . $t . PHP_EOL);
  9.         fclose($file);
  10.     }
  11.    
  12.     public static function setup() {
  13.         self::log('setup');
  14.        
  15.         require_once('models/sessiondata.php');
  16.         $dbSession = new DbSession(true);
  17.         $dbSession->_sessionModel = new sessiondata();
  18.        
  19.         session_set_save_handler(array($dbSession, 'open'),
  20.                 array($dbSession, 'close'),
  21.                 array($dbSession, 'read'),
  22.                 array($dbSession, 'write'),
  23.                 array($dbSession, 'destroy'),
  24.                 array($dbSession, 'clean')
  25.         );        
  26.         return $dbSession;
  27.     }
  28.    
  29.     public static function getInstance() {
  30.         if(empty(self::$_instance)) {
  31.             self::log('instance empty');            
  32.             self::$_instance = self::setup();
  33.         } else {
  34.             self::log('instance not empty');
  35.         }
  36.         return self::$_instance;
  37.     }
  38.    
  39.     public function __construct($firstTime = false)
  40.     {
  41.         $this->log('construct');
  42.         if($firstTime == false) {
  43.             return self::getInstance();
  44.         }
  45.     }
  46.  
  47.     public function close()
  48.     {
  49.         $this->log('close');
  50.         return true;
  51.     }
  52.  
  53.     public function open($path, $name)
  54.     {
  55.         $this->log('open '. $path . ' / ' . $name);
  56.         if($this->_sessionModel) {
  57.             return true;
  58.         }
  59.         return true;
  60.     }
  61.  
  62.     public function read($id)
  63.     {  
  64.         $this->log('read ' . $id);
  65.         try {
  66.             $session = $this->_sessionModel->fetch($id);
  67.             $this->log($session->data);
  68.             return $session->data;
  69.         } catch( Exception $e ) {
  70.             return '';
  71.         }
  72.     }
  73.  
  74.     public function write($id, $data)
  75.     {
  76.         $this->log('write');
  77.         try {
  78.             $session = $this->_sessionModel->fetch($id);
  79.         } catch( Exception $e ) {
  80.             $session = new sessiondata();
  81.         }
  82.         $session->data = $data;
  83.         $session->last_access = time();
  84.         $session->ip = $_SERVER['REMOTE_ADDR'];
  85.         $session->user_agent = $_SERVER['HTTP_USER_AGENT'];
  86.         return $session->save(); //true if ok
  87.     }
  88.  
  89.     public function destroy($id)
  90.     {
  91.         $this->log('destroy');
  92.         return true;
  93.         try {
  94.             $session = $this->_sessionModel->fetch($id);
  95.             $session->delete();
  96.         } catch( Exception $e ) {
  97.            
  98.         }
  99.     }
  100.  
  101.     public function clean($lifetime)
  102.     {
  103.         $this->log('clean');
  104.         return true;
  105.         $old = time() - $lifetime;
  106.         $sessions = $this->_sessionModel->fetchAll("last_access < '$old'");
  107.         if($sessions) {
  108.             foreach($sessions as $session) {
  109.                 $session->delete();
  110.             }
  111.         }
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement