Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/lib/zend/Zend/Service/WindowsAzure/SessionHandler.php
Go to the documentation of this file.
00001 <?php
00024 require_once 'Zend/Service/WindowsAzure/Storage/Table.php';
00025 
00029 require_once 'Zend/Service/WindowsAzure/Exception.php';
00030 
00038 class Zend_Service_WindowsAzure_SessionHandler
00039 {
00045     protected $_tableStorage;
00046     
00052     protected $_sessionTable;
00053     
00059     protected $_sessionTablePartition;
00060         
00068     public function __construct(Zend_Service_WindowsAzure_Storage_Table $tableStorage, $sessionTable = 'phpsessions', $sessionTablePartition = 'sessions')
00069         {
00070             // Set properties
00071                 $this->_tableStorage = $tableStorage;
00072                 $this->_sessionTable = $sessionTable;
00073                 $this->_sessionTablePartition = $sessionTablePartition;
00074         }
00075         
00081         public function register()
00082         {
00083         return session_set_save_handler(array($this, 'open'),
00084                                         array($this, 'close'),
00085                                         array($this, 'read'),
00086                                         array($this, 'write'),
00087                                         array($this, 'destroy'),
00088                                         array($this, 'gc')
00089         );
00090         }
00091         
00097     public function open()
00098     {
00099         // Make sure table exists
00100         $tableExists = $this->_tableStorage->tableExists($this->_sessionTable);
00101         if (!$tableExists) {
00102                     $this->_tableStorage->createTable($this->_sessionTable);
00103                 }
00104                 
00105                 // Ok!
00106                 return true;
00107     }
00108 
00114     public function close()
00115     {
00116         return true;
00117     }
00118     
00125     public function read($id)
00126     {
00127         try
00128         {
00129             $sessionRecord = $this->_tableStorage->retrieveEntityById(
00130                 $this->_sessionTable,
00131                 $this->_sessionTablePartition,
00132                 $id
00133             );
00134             return base64_decode($sessionRecord->serializedData);
00135         }
00136         catch (Zend_Service_WindowsAzure_Exception $ex)
00137         {
00138             return '';
00139         }
00140     }
00141     
00148     public function write($id, $serializedData)
00149     {
00150         $sessionRecord = new Zend_Service_WindowsAzure_Storage_DynamicTableEntity($this->_sessionTablePartition, $id);
00151         $sessionRecord->sessionExpires = time();
00152         $sessionRecord->serializedData = base64_encode($serializedData);
00153         
00154         $sessionRecord->setAzurePropertyType('sessionExpires', 'Edm.Int32');
00155 
00156         try
00157         {
00158             $this->_tableStorage->updateEntity($this->_sessionTable, $sessionRecord);
00159         }
00160         catch (Zend_Service_WindowsAzure_Exception $unknownRecord)
00161         {
00162             $this->_tableStorage->insertEntity($this->_sessionTable, $sessionRecord);
00163         }
00164     }
00165     
00172     public function destroy($id)
00173     {
00174         try
00175         {
00176             $sessionRecord = $this->_tableStorage->retrieveEntityById(
00177                 $this->_sessionTable,
00178                 $this->_sessionTablePartition,
00179                 $id
00180             );
00181             $this->_tableStorage->deleteEntity($this->_sessionTable, $sessionRecord);
00182             
00183             return true;
00184         }
00185         catch (Zend_Service_WindowsAzure_Exception $ex)
00186         {
00187             return false;
00188         }
00189     }
00190     
00201     public function gc($lifeTime)
00202     {
00203         try
00204         {
00205             $result = $this->_tableStorage->retrieveEntities($this->_sessionTable, 'PartitionKey eq \'' . $this->_sessionTablePartition . '\' and sessionExpires lt ' . (time() - $lifeTime));
00206             foreach ($result as $sessionRecord)
00207             {
00208                 $this->_tableStorage->deleteEntity($this->_sessionTable, $sessionRecord);
00209             }
00210             return true;
00211         }
00212         catch (Zend_Service_WindowsAzure_exception $ex)
00213         {
00214             return false;
00215         }
00216     }
00217 }
 All Data Structures Namespaces Files Functions Variables Enumerations