From 71342e943ec4cf1bedef68bbe7e4bbf48b8d85b3 Mon Sep 17 00:00:00 2001 From: Darren Oh Date: Thu, 21 Apr 2011 15:01:36 -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 | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/memcache-session.inc b/memcache-session.inc index 02e4ce1..1a86c26 100644 --- a/memcache-session.inc +++ b/memcache-session.inc @@ -70,6 +70,7 @@ function sess_write($key, $value) { if ($user->uid || $value) { dmemcache_set($key, $session, ini_get('session.gc_maxlifetime'), 'session'); + $user->sids[$key] = TRUE; dmemcache_set($user->uid, $user, ini_get('session.gc_maxlifetime'), 'users'); if ($user->uid && $user->access < $_SERVER['REQUEST_TIME'] - 300) { db_query("UPDATE {users} SET access = %d WHERE uid = %d", $_SERVER['REQUEST_TIME'], $user->uid); @@ -128,9 +129,16 @@ function sess_destroy_sid($sid) { } /** - * End a specific user's session. Not implemented. + * End a specific user's session. */ function sess_destroy_uid($uid) { + $user = dmemcache_get($uid, 'users'); + if (is_object($user) && !empty($user->sids)) { + foreach ($user->sids as $sid => $status) { + dmemcache_delete($sid, 'session'); + } + } + dmemcache_delete($uid, 'users'); } function sess_gc($lifetime) { -- 1.7.4.1 From 15a296f1d69afdba5859ecb7459ac35e4a9e8455 Mon Sep 17 00:00:00 2001 From: Darren Oh Date: Mon, 16 May 2011 12:42:10 -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 1a86c26..795f54b 100644 --- a/memcache-session.inc +++ b/memcache-session.inc @@ -70,7 +70,8 @@ function sess_write($key, $value) { if ($user->uid || $value) { dmemcache_set($key, $session, ini_get('session.gc_maxlifetime'), 'session'); - $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'); if ($user->uid && $user->access < $_SERVER['REQUEST_TIME'] - 300) { db_query("UPDATE {users} SET access = %d WHERE uid = %d", $_SERVER['REQUEST_TIME'], $user->uid); @@ -80,6 +81,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 @@ -134,7 +139,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