|
Moodle
2.2.1
http://www.collinsharper.com
|
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 }