alecpl
2009-12-11 2717f9f68e74277379c065d32bd0771976e49c86
program/include/session.inc
@@ -19,6 +19,7 @@
*/
$GLOBALS['rcube_session_unsets'] = array();
function rcube_sess_open($save_path, $session_name)
{
@@ -64,12 +65,21 @@
  
  $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 {
@@ -82,35 +92,19 @@
      (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());
  $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;
}
@@ -251,7 +245,7 @@
  $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