From b0e5e73303e1fec466c7f0c28d33894cb30437fa Mon Sep 17 00:00:00 2001
From: Darren Oh <darren@oh.name>
Date: Thu, 21 Apr 2011 14:48:28 -0400
Subject: [PATCH 1/2] =?UTF-8?q?Issue=20#441842=20by=20Darren=20Oh:=20Fixed=20account=20disabling=20to=20remove=20all=20user=E2=80=99s=20sessions.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 memcache-session.inc |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/memcache-session.inc b/memcache-session.inc
index f46f7ca..9a02f22 100644
--- a/memcache-session.inc
+++ b/memcache-session.inc
@@ -147,7 +147,7 @@ function sess_write($key, $value) {
       unset($user->session);
       unset($user->session_data_present_at_load);
       // Store the session id so we can locate the session with the user id.
-      $user->sid = $key;
+      $user->sids[$key] = TRUE;
       dmemcache_set($user->uid, $user, ini_get('session.gc_maxlifetime'), 'users');
     }
   }
@@ -232,8 +232,10 @@ function sess_destroy_sid($sid) {
  */
 function sess_destroy_uid($uid) {
   $user = dmemcache_get($uid, 'users');
-  if (is_object($user) && isset($user->sid)) {
-    dmemcache_delete($user->sid, 'session');
+  if (is_object($user) && !empty($user->sids)) {
+    foreach ($user->sids as $sid => $status) {
+      dmemcache_delete($sid, 'session');
+    }
   }
   dmemcache_delete($uid, 'users');
 }
-- 
1.7.4.1


From 7f32487fa2f55c75d0ae8da63730f4bd693facd1 Mon Sep 17 00:00:00 2001
From: Darren Oh <darren@oh.name>
Date: Mon, 16 May 2011 12:14:13 -0400
Subject: [PATCH 2/2] Issue #441842 by Darren Oh: Fixed dead sessions accumulating in user object.

---
 memcache-session.inc |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/memcache-session.inc b/memcache-session.inc
index 9a02f22..e5cb7fd 100644
--- a/memcache-session.inc
+++ b/memcache-session.inc
@@ -147,7 +147,8 @@ function sess_write($key, $value) {
       unset($user->session);
       unset($user->session_data_present_at_load);
       // Store the session id so we can locate the session with the user id.
-      $user->sids[$key] = TRUE;
+      $user->sids[] = $key;
+      $user->sids = array_filter(array_unique($user->sids), '_memcache_session_filter');
       dmemcache_set($user->uid, $user, ini_get('session.gc_maxlifetime'), 'users');
     }
   }
@@ -155,6 +156,10 @@ function sess_write($key, $value) {
   return TRUE;
 }
 
+function _memcache_session_filter($sid) {
+  return dmemcache_get($sid, 'session') !== FALSE;
+}
+
 function sess_regenerate() {
   // We code around http://bugs.php.net/bug.php?id=32802 by destroying
   // the session cookie by setting expiration in the past (a negative
@@ -233,7 +238,7 @@ function sess_destroy_sid($sid) {
 function sess_destroy_uid($uid) {
   $user = dmemcache_get($uid, 'users');
   if (is_object($user) && !empty($user->sids)) {
-    foreach ($user->sids as $sid => $status) {
+    foreach ($user->sids as $sid) {
       dmemcache_delete($sid, 'session');
     }
   }
-- 
1.7.4.1

