| | |
| | | |
| | | */ |
| | | |
| | | $GLOBALS['rcube_session_unsets'] = array(); |
| | | |
| | | function rcube_sess_open($save_path, $session_name) |
| | | { |
| | |
| | | |
| | | $now = $DB->fromunixtime(time()); |
| | | |
| | | if ($oldvars = rcube_sess_read($key)) { |
| | | $sql_result = $DB->query( |
| | | "SELECT vars FROM " . get_table_name('session') . " |
| | | WHERE sess_id=?", $key); |
| | | |
| | | if ($sql_arr = $DB->fetch_assoc($sql_result)) { |
| | | |
| | | $a_oldvars = rcube_sess_unserialize($sql_arr['vars']); |
| | | foreach ((array)$GLOBALS['rcube_session_unsets'] as $k) |
| | | unset($a_oldvars[$k]); |
| | | |
| | | $DB->query( |
| | | "UPDATE " . get_table_name('session') . " |
| | | SET vars=?, changed= " . $now . " |
| | | WHERE sess_id=?", |
| | | rcube_sess_serialize(array_merge(rcube_sess_unserialize($oldvars), rcube_sess_unserialize($vars))), |
| | | rcube_sess_serialize(array_merge($a_oldvars, rcube_sess_unserialize($vars))), |
| | | $key); |
| | | } |
| | | else { |
| | |
| | | (string)$_SERVER['REMOTE_ADDR']); |
| | | } |
| | | |
| | | $GLOBALS['rcube_session_unsets'] = array(); |
| | | return true; |
| | | } |
| | | |
| | | |
| | | // unset session variable |
| | | function rcube_sess_unset($var) |
| | | function rcube_sess_unset($var=NULL) |
| | | { |
| | | $DB = rcmail::get_instance()->get_dbh(); |
| | | if (empty($var)) |
| | | return rcube_sess_destroy(session_id()); |
| | | |
| | | if ($DB->is_error()) { |
| | | return false; |
| | | } |
| | | |
| | | $now = $DB->fromunixtime(time()); |
| | | |
| | | $sql_result = $DB->query( |
| | | "SELECT vars |
| | | FROM " . get_table_name('session') . " |
| | | WHERE sess_id=?", |
| | | session_id()); |
| | | |
| | | if ($sql_arr = $DB->fetch_assoc($sql_result)) { |
| | | $vars = rcube_sess_unserialize($sql_arr['vars']); |
| | | if (isset($vars[$var])) { |
| | | unset($vars[$var]); |
| | | $DB->query( |
| | | "UPDATE " . get_table_name('session') . " |
| | | SET vars=?, changed= " . $now . " |
| | | WHERE sess_id=?", |
| | | rcube_sess_serialize($vars), |
| | | session_id()); |
| | | } |
| | | } |
| | | $GLOBALS['rcube_session_unsets'][] = $var; |
| | | unset($_SESSION[$var]); |
| | | |
| | | return true; |
| | | } |
| | |
| | | // handler for session_destroy() |
| | | function rcube_sess_destroy($key) |
| | | { |
| | | $rcmail = rcmail::get_instance(); |
| | | $DB = $rcmail->get_dbh(); |
| | | $DB = rcmail::get_instance()->get_dbh(); |
| | | |
| | | $DB->query("DELETE FROM " . get_table_name('session') . " WHERE sess_id=?", $key); |
| | | |
| | |
| | | $randval = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; |
| | | |
| | | for ($random = "", $i=1; $i <= 32; $i++) { |
| | | $random .= substr($randval, rand(0,(strlen($randval) - 1)), 1); |
| | | $random .= substr($randval, mt_rand(0,(strlen($randval) - 1)), 1); |
| | | } |
| | | |
| | | // use md5 value for id or remove capitals from string $randval |