1<?php 2 3/** 4 * Session handling 5 * @package framework 6 * @subpackage session 7 */ 8 9/** 10 * This session class uses a memcached to manage session data. It does not 11 * use PHP session handlers at all and is a completely indenpendant session system. 12 */ 13class Hm_Memcached_Session extends Hm_DB_Session { 14 15 /* session key */ 16 public $session_key = ''; 17 18 /* memcached connection */ 19 public $conn; 20 21 /* default session lifetime */ 22 public $cache_lifetime = 86400; 23 24 /** 25 * Start the session. This could be an existing session or a new login 26 * @param object $request request details 27 * @return void 28 */ 29 public function start($request, $existing_session=False) { 30 $this->db_start($request); 31 } 32 33 /** 34 * save data on session start 35 * @return boolean|integer|array 36 */ 37 public function insert_session_row() { 38 return $this->save_data(); 39 } 40 41 /** 42 * update memcache with current data 43 * @return boolean|integer|array 44 */ 45 public function save_data() { 46 $enc_data = $this->ciphertext($this->data); 47 return $this->conn->set($this->session_key, $enc_data, $this->cache_lifetime); 48 } 49 50 /** 51 * End a session after a page request is complete. This only closes the session and 52 * does not destroy it 53 * @return void 54 */ 55 public function end() { 56 if ($this->active && !$this->session_closed) { 57 $this->save_data(); 58 $this->conn->close(); 59 } 60 $this->active = false; 61 } 62 63 /** 64 * Close a session early, but don't destroy it 65 * @return void 66 */ 67 public function close_early() { 68 $this->session_closed = true; 69 $this->save_data(); 70 $this->conn->close(); 71 } 72 73 /** 74 * Destroy a session for good 75 * @param object $request request details 76 * @return void 77 */ 78 public function destroy($request) { 79 if (Hm_Functions::function_exists('delete_uploaded_files')) { 80 delete_uploaded_files($this); 81 } 82 $this->conn->del($this->session_key); 83 $this->delete_cookie($request, $this->cname); 84 $this->delete_cookie($request, 'hm_id'); 85 $this->session_closed = true; 86 $this->conn->close(); 87 $this->active = false; 88 Hm_Request_Key::load($this, $request, false); 89 } 90 91 /** 92 * @return boolean 93 */ 94 public function connect() { 95 $this->conn = new Hm_Memcached($this->site_config); 96 return $this->conn->is_active(); 97 } 98 99 /** 100 * Get session data from the DB 101 * @param string $key session key 102 * @return mixed array results or false on failure 103 */ 104 public function get_session_data($key) { 105 return $this->plaintext($this->conn->get($key)); 106 } 107 108} 109