--- OriModules/session_limit/session_limit.module 2008-12-04 19:30:13.000000000 +0300 +++ sites/all/modules/session_limit/session_limit.module 2009-09-04 16:44:44.000000000 +0300 @@ -34,7 +34,7 @@ function session_limit_settings() { ); $form['session_limit_auto_drop'] = array( '#type' => 'checkbox', - '#title' => t('Automatically drop the oldest session without prompting.'), + '#title' => t('Automatically drop the oldest sessions without prompting.'), '#default_value' => variable_get('session_limit_auto_drop', 0) ); if (module_exists('masquerade')) { @@ -156,12 +156,14 @@ function session_limit_page() { drupal_goto(); } + if (variable_get('session_limit_auto_drop', 0)) { - // Get the oldest session. - $sid = db_result(db_query_range("SELECT sid FROM {sessions} WHERE uid = %d ORDER BY timestamp", $user->uid, 0, 1)); + // Get the oldest sessions. + $count = db_result(db_query("SELECT count(sid) FROM {sessions} WHERE uid = %d", $user->uid)); + $sidrange = db_query_range("SELECT sid FROM {sessions} WHERE uid = %d ORDER BY timestamp", $user->uid, 0, $count-variable_get('session_limit_max', $count)); - if ($sid) { - _session_limit_disconnect($sid); + while ($sid = db_fetch_object($sidrange)->sid) { + _session_limit_disconnect($sid); } drupal_goto();