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: */
13: class 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: