Changeset 2476 in subversion


Ignore:
Timestamp:
May 14, 2009 3:22:01 AM (4 years ago)
Author:
thomasb
Message:

Don't write session data on every unset but just remember the unset variables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/program/include/session.inc

    r2472 r2476  
    2020*/ 
    2121 
     22$GLOBALS['rcube_session_unsets'] = array(); 
    2223 
    2324function rcube_sess_open($save_path, $session_name) 
     
    6667 
    6768  if ($oldvars = rcube_sess_read($key)) { 
     69    $a_oldvars = rcube_sess_unserialize($oldvars); 
     70    foreach ((array)$GLOBALS['rcube_session_unsets'] as $k) 
     71      unset($a_oldvars[$k]); 
     72 
    6873    $DB->query( 
    6974      "UPDATE " . get_table_name('session') . " 
    7075       SET    vars=?, changed= " . $now . " 
    7176       WHERE  sess_id=?", 
    72       rcube_sess_serialize(array_merge(rcube_sess_unserialize($oldvars), rcube_sess_unserialize($vars))), 
     77      rcube_sess_serialize(array_merge($a_oldvars, rcube_sess_unserialize($vars))), 
    7378      $key); 
    7479  } 
     
    8388  } 
    8489 
     90  $GLOBALS['rcube_session_unsets'] = array(); 
    8591  return true; 
    8692} 
     
    9096function rcube_sess_unset($var=NULL) 
    9197{ 
    92   $DB = rcmail::get_instance()->get_dbh(); 
    93  
    9498  if (empty($var)) 
    9599    return rcube_sess_destroy(session_id()); 
    96100 
    97   $now = $DB->fromunixtime(time()); 
    98  
    99   $sql_result = $DB->query( 
    100     "SELECT vars 
    101      FROM " . get_table_name('session') . " 
    102      WHERE  sess_id=?", 
    103      session_id()); 
    104  
    105   if ($sql_arr = $DB->fetch_assoc($sql_result)) { 
    106     $vars = rcube_sess_unserialize($sql_arr['vars']); 
    107     if (isset($vars[$var])) { 
    108       unset($vars[$var]); 
    109       $DB->query( 
    110         "UPDATE " . get_table_name('session') . " 
    111          SET    vars=?, changed= " . $now . " 
    112          WHERE  sess_id=?", 
    113          rcube_sess_serialize($vars), 
    114          session_id()); 
    115     } 
    116   }    
     101  $GLOBALS['rcube_session_unsets'][] = $var; 
     102  unset($_SESSION[$var]); 
    117103 
    118104  return true; 
Note: See TracChangeset for help on using the changeset viewer.