file.php (1472B)
1 <?php 2 namespace Session; 3 class File { 4 private $directory; 5 6 public function read($session_id) { 7 $file = DIR_SESSION . '/sess_' . basename($session_id); 8 9 if (is_file($file)) { 10 $handle = fopen($file, 'r'); 11 12 flock($handle, LOCK_SH); 13 14 $data = fread($handle, filesize($file)); 15 16 flock($handle, LOCK_UN); 17 18 fclose($handle); 19 20 return unserialize($data); 21 } else { 22 return array(); 23 } 24 } 25 26 public function write($session_id, $data) { 27 $file = DIR_SESSION . '/sess_' . basename($session_id); 28 29 $handle = fopen($file, 'w'); 30 31 flock($handle, LOCK_EX); 32 33 fwrite($handle, serialize($data)); 34 35 fflush($handle); 36 37 flock($handle, LOCK_UN); 38 39 fclose($handle); 40 41 return true; 42 } 43 44 public function destroy($session_id) { 45 $file = DIR_SESSION . '/sess_' . basename($session_id); 46 47 if (is_file($file)) { 48 unset($file); 49 } 50 } 51 52 public function __destruct() { 53 if (ini_get('session.gc_divisor')) { 54 $gc_divisor = ini_get('session.gc_divisor'); 55 } else { 56 $gc_divisor = 1; 57 } 58 59 if (ini_get('session.gc_probability')) { 60 $gc_probability = ini_get('session.gc_probability'); 61 } else { 62 $gc_probability = 1; 63 } 64 65 if ((rand() % $gc_divisor) < $gc_probability) { 66 $expire = time() - ini_get('session.gc_maxlifetime'); 67 68 $files = glob(DIR_SESSION . '/sess_*'); 69 70 foreach ($files as $file) { 71 if (filemtime($file) < $expire) { 72 unlink($file); 73 } 74 } 75 } 76 } 77 }