From 4e17e6c9dbac8991ee8b302cb2581241247dc8bc Mon Sep 17 00:00:00 2001 From: thomascube Date: Sun, 25 Sep 2005 14:18:03 +0000 Subject: Initial revision --- program/include/session.inc | 154 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 program/include/session.inc (limited to 'program/include/session.inc') diff --git a/program/include/session.inc b/program/include/session.inc new file mode 100644 index 000000000..c68b3dba9 --- /dev/null +++ b/program/include/session.inc @@ -0,0 +1,154 @@ + | + +-----------------------------------------------------------------------+ + + $Id$ + +*/ + + +function sess_open($save_path, $session_name) + { + return TRUE; + } + + + +function sess_close() + { + return TRUE; + } + + +// read session data +function sess_read($key) + { + global $DB, $SESS_CHANGED; + + $sql_result = $DB->query(sprintf("SELECT vars, UNIX_TIMESTAMP(changed) AS changed + FROM %s + WHERE sess_id='%s'", + get_table_name('session'), + $key)); + + if ($sql_arr = $DB->fetch_assoc($sql_result)) + { + $SESS_CHANGED = $sql_arr['changed']; + + if (strlen($sql_arr['vars'])) + return $sql_arr['vars']; + } + + return FALSE; + } + + +// save session data +function sess_write($key, $vars) + { + global $DB; + + $sql_result = $DB->query(sprintf("SELECT 1 + FROM %s + WHERE sess_id='%s'", + get_table_name('session'), + $key)); + + if ($DB->num_rows($sql_result)) + { + session_decode($vars); + $DB->query(sprintf("UPDATE %s + SET vars='%s', + changed=NOW() + WHERE sess_id='%s'", + get_table_name('session'), + $vars, + $key)); + } + else + { + $DB->query(sprintf("INSERT INTO %s + (sess_id, vars, created, changed) + VALUES ('%s', '%s', NOW(), NOW())", + get_table_name('session'), + $key, + $vars)); + } + + return TRUE; + } + + +// handler for session_destroy() +function sess_destroy($key) + { + global $DB; + + $DB->query(sprintf("DELETE FROM %s + WHERE sess_id='%s'", + get_table_name('session'), + $key)); + + // also delete session entries in cache table + $DB->query(sprintf("DELETE FROM %s + WHERE session_id='%s'", + get_table_name('cache'), + $key)); + + return TRUE; + } + + +// garbage collecting function +function sess_gc($maxlifetime) + { + global $DB; + + // get all expired sessions + $sql_result = $DB->query(sprintf("SELECT sess_id + FROM %s + WHERE UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(created) > %d", + get_table_name('session'), + $maxlifetime)); + + $a_exp_sessions = array(); + while ($sql_arr = $DB->fetch_assoc($sql_result)) + $a_exp_sessions[] = $sql_arr['sess_id']; + + + if (sizeof($a_exp_sessions)) + { + // delete session records + $DB->query(sprintf("DELETE FROM %s + WHERE sess_id IN ('%s')", + get_table_name('session'), + join("','", $a_exp_sessions))); + + // also delete session cache records + $DB->query(sprintf("DELETE FROM %s + WHERE session_id IN ('%s')", + get_table_name('cache'), + join("','", $a_exp_sessions))); + } + + return TRUE; + } + + +// set custom functions for PHP session management +session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc'); + +?> -- cgit v1.2.3