diff options
| author | Henry Sudhof <kellanved@phpbb.com> | 2007-09-13 15:15:27 +0000 |
|---|---|---|
| committer | Henry Sudhof <kellanved@phpbb.com> | 2007-09-13 15:15:27 +0000 |
| commit | 052025bb1f144337952236c5c4774826818037d4 (patch) | |
| tree | 3557f8a43c06a3944ed2f0de1b5835a3289d8d09 /phpBB/includes/session.php | |
| parent | 685282c2cbe8a6d8c7abd77d3801d7242d0ae693 (diff) | |
| download | forums-052025bb1f144337952236c5c4774826818037d4.tar forums-052025bb1f144337952236c5c4774826818037d4.tar.gz forums-052025bb1f144337952236c5c4774826818037d4.tar.bz2 forums-052025bb1f144337952236c5c4774826818037d4.tar.xz forums-052025bb1f144337952236c5c4774826818037d4.zip | |
-#14438
-Refactor the confirm table cleanup
-Add confirm table cleanup to session garbage collection. Might require own pseudo-cron.
git-svn-id: file:///svn/phpbb/trunk@8089 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/session.php')
| -rw-r--r-- | phpBB/includes/session.php | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 4d2d22a804..de60f7f2bf 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -746,6 +746,8 @@ class session { global $db, $config; + $batch_size = 10; + if (!$this->time_now) { $this->time_now = time(); @@ -762,7 +764,7 @@ class session FROM ' . SESSIONS_TABLE . ' WHERE session_time < ' . ($this->time_now - $config['session_length']) . ' GROUP BY session_user_id, session_page'; - $result = $db->sql_query_limit($sql, 10); + $result = $db->sql_query_limit($sql, $batch_size); $del_user_id = array(); $del_sessions = 0; @@ -788,23 +790,55 @@ class session $db->sql_query($sql); } - if ($del_sessions < 10) + if ($del_sessions < $batch_size) { - // Less than 10 sessions, update gc timer ... else we want gc + // Less than 10 users, update gc timer ... else we want gc // called again to delete other sessions set_config('session_last_gc', $this->time_now, true); + + if ($config['max_autologin_time']) + { + $sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . ' + WHERE last_login < ' . (time() - (86400 * (int) $config['max_autologin_time'])); + $db->sql_query($sql); + } + $this->confirm_gc(); } + + return; + } + + function confirm_gc($type = 0) + { + global $db, $config; + + $sql = 'SELECT DISTINCT c.session_id + FROM ' . CONFIRM_TABLE . ' c + LEFT JOIN ' . SESSIONS_TABLE . ' s ON (c.session_id = s.session_id) + WHERE s.session_id IS NULL' . + ((empty($type)) ? '' : ' AND c.confirm_type = ' . (int) $type); + $result = $db->sql_query($sql); - if ($config['max_autologin_time']) + if ($row = $db->sql_fetchrow($result)) { - $sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . ' - WHERE last_login < ' . (time() - (86400 * (int) $config['max_autologin_time'])); - $db->sql_query($sql); - } + $sql_in = array(); + do + { + $sql_in[] = (string) $row['session_id']; + } + while ($row = $db->sql_fetchrow($result)); - return; + if (sizeof($sql_in)) + { + $sql = 'DELETE FROM ' . CONFIRM_TABLE . ' + WHERE ' . $db->sql_in_set('session_id', $sql_in); + $db->sql_query($sql); + } + } + $db->sql_freeresult($result); } - + + /** * Sets a cookie * |
