? apc.php
? session_optimized.patch
? uid_1_destination.patch
? sites/localhost.amsterdam
Index: includes/session.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/session.inc,v
retrieving revision 1.19
diff -F^f -u -r1.19 session.inc
--- includes/session.inc	25 Aug 2005 21:14:16 -0000	1.19
+++ includes/session.inc	20 Oct 2005 15:59:30 -0000
@@ -6,6 +6,8 @@
  * User session handling functions.
  */
 
+define(SESSION_WRITE_PERIOD, 300);
+
 /*** Session functions *****************************************************/
 
 function sess_open($save_path, $session_name) {
@@ -29,6 +31,7 @@ function sess_read($key) {
   $user = db_fetch_object($result);
   $user = drupal_unpack($user);
   $user->roles = array();
+  $user->timestamp = $user->access;
 
   $result = db_query("SELECT r.rid, r.name FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid = %d", $user->uid);
 
@@ -36,15 +39,28 @@ function sess_read($key) {
     $user->roles[$role->rid] = $role->name;
   }
 
+  _sess_save();
   return !empty($user->session) ? $user->session : '';
 }
 
-function sess_write($key, $value) {
+function _sess_save($set = TRUE, $key = NULL, $value = NULL) {
   global $user;
+  static $user_old;
+  if ($set) {
+    $user_old = $user;
+    return;
+  }
+  $expired = time() - $user->access > SESSION_WRITE_PERIOD;
+  if ($expired || !($value == (!empty($user_old->session) ? $user_old->session : '') && $user_old->cache == $user->cache && $user_old->uid == $user->uid)) {
+    db_query("UPDATE {sessions} SET uid = %d, cache = %d, hostname = '%s', session = '%s', timestamp = %d WHERE sid = '%s'", $user->uid, $user->cache, $_SERVER["REMOTE_ADDR"], $value, time(), $key);
+  }
+  if ($user->uid && $expired) {
+    db_query("UPDATE {users} SET access = %d WHERE uid = %d", time(), $user->uid);
+  }
+}
 
-  db_query("UPDATE {sessions} SET uid = %d, cache = %d, hostname = '%s', session = '%s', timestamp = %d WHERE sid = '%s'", $user->uid, $user->cache, $_SERVER["REMOTE_ADDR"], $value, time(), $key);
-  db_query("UPDATE {users} SET access = %d WHERE uid = %d", time(), $user->uid);
-
+function sess_write($key, $value) {
+  _sess_save(FALSE, $key, $value)
   return '';
 }
 
