Changeset 3e48d2ee in github
- Timestamp:
- Nov 21, 2008 1:19:30 PM (4 years ago)
- Branches:
- master, HEAD, courier-fix, dev-browser-capabilities, pdo, release-0.6, release-0.7, release-0.8
- Children:
- dcf780a
- Parents:
- be7d3b6
- Files:
-
- 11 edited
-
CHANGELOG (modified) (1 diff)
-
SQL/mssql.initial.sql (modified) (1 diff)
-
SQL/mysql.initial.sql (modified) (1 diff)
-
SQL/mysql.update.sql (modified) (1 diff)
-
SQL/mysql5.initial.sql (modified) (1 diff)
-
SQL/postgres.initial.sql (modified) (1 diff)
-
SQL/postgres.update.sql (modified) (1 diff)
-
SQL/sqlite.initial.sql (modified) (1 diff)
-
SQL/sqlite.update.sql (modified) (1 diff)
-
program/include/rcube_imap.php (modified) (3 diffs)
-
program/include/session.inc (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
CHANGELOG
rbe7d3b6 r3e48d2ee 5 5 ---------- 6 6 - Fix 'cache' table cleanup on session destroy (#1485516) 7 - Increase speed of session destroy and garbage clean up 8 - Fix session timeout when DB server got clock skew (#1485490) 7 9 8 10 2008/11/19 (alec) -
SQL/mssql.initial.sql
r84d06ed r3e48d2ee 197 197 GO 198 198 199 CREATE INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY] 200 GO 201 199 202 ALTER TABLE [dbo].[users] ADD 200 203 CONSTRAINT [DF_users_username] DEFAULT ('') FOR [username], -
SQL/mysql.initial.sql
rc98f3b5 r3e48d2ee 74 74 `ip` VARCHAR(40) NOT NULL default '', 75 75 `vars` text NOT NULL, 76 PRIMARY KEY (`sess_id`) 76 PRIMARY KEY (`sess_id`), 77 INDEX `changed_index` (`changed`) 77 78 ); 78 79 -
SQL/mysql.update.sql
rbe7d3b6 r3e48d2ee 39 39 ON DELETE CASCADE 40 40 ON UPDATE CASCADE; 41 42 ALTER TABLE `session` 43 ADD INDEX `changed_index` (`changed`); -
SQL/mysql5.initial.sql
rbe7d3b6 r3e48d2ee 15 15 `ip` varchar(40) NOT NULL, 16 16 `vars` text NOT NULL, 17 PRIMARY KEY(`sess_id`) 17 PRIMARY KEY(`sess_id`), 18 INDEX `changed_index` (`changed`) 18 19 ) TYPE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci; 19 20 -
SQL/postgres.initial.sql
rbe7d3b6 r3e48d2ee 43 43 ); 44 44 45 CREATE INDEX session_changed_idx ON session (changed); 45 46 46 47 -
SQL/postgres.update.sql
rbe7d3b6 r3e48d2ee 26 26 27 27 ALTER TABLE cache DROP CONSTRAINT cache_session_id_fkey; 28 ALTER TABLE cache ADD FOREIGN KEY (session_id) REFERENCES session(sess_id) ON DELETE CASCADE ON UPDATE CASCADE; 29 CREATE INDEX cache_session_id_idx ON "cache" (session_id); 28 ALTER TABLE cache ADD FOREIGN KEY (session_id) REFERENCES session (sess_id) ON DELETE CASCADE ON UPDATE CASCADE; 29 30 CREATE INDEX cache_session_id_idx ON cache (session_id); 31 CREATE INDEX session_changed_idx ON session (changed); -
SQL/sqlite.initial.sql
rc98f3b5 r3e48d2ee 98 98 ); 99 99 100 CREATE INDEX ix_session_changed ON session (changed); 100 101 101 102 -- -------------------------------------------------------- -
SQL/sqlite.update.sql
rc98f3b5 r3e48d2ee 30 30 31 31 CREATE INDEX ix_messages_created ON messages (created); 32 33 -- Updates from version 0.2-beta 34 35 CREATE INDEX ix_session_changed ON session (changed); -
program/include/rcube_imap.php
rbe7d3b6 r3e48d2ee 2147 2147 $this->db->query( 2148 2148 "UPDATE ".get_table_name('cache')." 2149 SET created=". $this->db->now().", data=?, session_id=?2149 SET created=". $this->db->fromunixtime(time()).", data=?, session_id=? 2150 2150 WHERE user_id=? 2151 2151 AND cache_key=?", … … 2161 2161 "INSERT INTO ".get_table_name('cache')." 2162 2162 (created, user_id, cache_key, data, session_id) 2163 VALUES (".$this->db-> now().", ?, ?, ?, ?)",2163 VALUES (".$this->db->fromunixtime(time()).", ?, ?, ?, ?)", 2164 2164 $_SESSION['user_id'], 2165 2165 $key, … … 2375 2375 "INSERT INTO ".get_table_name('messages')." 2376 2376 (user_id, del, cache_key, created, idx, uid, subject, ".$this->db->quoteIdentifier('from').", ".$this->db->quoteIdentifier('to').", cc, date, size, headers, structure) 2377 VALUES (?, 0, ?, ".$this->db-> now().", ?, ?, ?, ?, ?, ?, ".$this->db->fromunixtime($headers->timestamp).", ?, ?, ?)",2377 VALUES (?, 0, ?, ".$this->db->fromunixtime(time()).", ?, ?, ?, ?, ?, ?, ".$this->db->fromunixtime($headers->timestamp).", ?, ?, ?)", 2378 2378 $_SESSION['user_id'], 2379 2379 $key, -
program/include/session.inc
ra2740628 r3e48d2ee 76 76 $key); 77 77 78 $now = $DB->fromunixtime(time()); 79 78 80 if ($DB->num_rows($sql_result)) { 79 81 $DB->query( 80 82 "UPDATE " . get_table_name('session') . " 81 SET vars=?, changed= " . $DB->now(). "83 SET vars=?, changed= " . $now . " 82 84 WHERE sess_id=?", 83 85 $vars, … … 88 90 "INSERT INTO " . get_table_name('session') . " 89 91 (sess_id, vars, ip, created, changed) 90 VALUES (?, ?, ?, " .$DB->now().", ".$DB->now().")",92 VALUES (?, ?, ?, " . $now . ", " . $now .")", 91 93 $key, 92 94 $vars, … … 108 110 } 109 111 112 $DB->query("DELETE FROM " . get_table_name('session') . " WHERE sess_id=?", $key); 113 114 // delete session entries in cache table 115 // on databases wthout foreign keys 116 if ($rcmail->config->get('enable_caching') && $DB->db_provider != 'pgsql') { 117 $DB->query("DELETE FROM " . get_table_name('cache') . " WHERE session_id=?", $key); 118 } 119 120 return true; 121 } 122 123 124 // garbage collecting function 125 function rcube_sess_gc($maxlifetime) 126 { 127 $rcmail = rcmail::get_instance(); 128 $DB = $rcmail->get_dbh(); 129 130 if ($DB->is_error()) { 131 return false; 132 } 133 134 $now = $DB->fromunixtime(time() - $maxlifetime); 135 110 136 // delete session entries in cache table 111 137 if ($rcmail->config->get('enable_caching')) { 112 $DB->query("DELETE FROM " . get_table_name('cache') . " WHERE session_id=?", $key); 113 } 114 115 $DB->query("DELETE FROM " . get_table_name('session') . " WHERE sess_id=?", $key); 116 117 return true; 118 } 119 120 121 // garbage collecting function 122 function rcube_sess_gc($maxlifetime) 123 { 124 $rcmail = rcmail::get_instance(); 125 $DB = $rcmail->get_dbh(); 126 127 if ($DB->is_error()) { 128 return false; 129 } 130 131 if ($rcmail->config->get('enable_caching')) { 132 // get all expired sessions 133 $sql_result = $DB->query( 134 "SELECT sess_id 135 FROM " . get_table_name('session') . " 136 WHERE " . $DB->unixtimestamp($DB->now())."-".$DB->unixtimestamp('changed') . " > ?", 137 $maxlifetime); 138 139 $exp_sessions = array(); 140 while ($sql_arr = $DB->fetch_assoc($sql_result)) { 141 $exp_sessions[] = $sql_arr['sess_id']; 138 139 // on databases wthout foreign keys... 140 if($DB->db_provider != 'pgsql') { 141 142 // get all expired sessions 143 $sql_result = $DB->query( 144 "SELECT sess_id FROM " . get_table_name('session') . " 145 WHERE changed < " . $now); 146 147 $exp_sessions = array(); 148 while ($sql_arr = $DB->fetch_assoc($sql_result)) { 149 $exp_sessions[] = $sql_arr['sess_id']; 150 } 151 152 if (sizeof($exp_sessions)) { 153 $exp_sessions = "'" . join("','", $exp_sessions) . "'"; 154 // delete session cache records 155 $DB->query("DELETE FROM " . get_table_name('cache') . " 156 WHERE session_id IN (" . $exp_sessions . ")"); 157 } 142 158 } 143 144 if (sizeof($exp_sessions)) {145 $exp_sessions = "'" . join("','", $exp_sessions) . "'";146 // delete session cache records147 $DB->query("DELETE FROM " . get_table_name('cache') . "148 WHERE session_id IN (" . $exp_sessions . ")");149 150 // delete session records151 $DB->query("DELETE FROM " . get_table_name('session') . "152 WHERE sess_id IN (" . $exp_sessions . ")");153 }154 155 159 // also run message cache GC 156 160 rcmail_message_cache_gc(); 157 158 } else { 159 // just delete all expired sessions 160 $DB->query("DELETE FROM " . get_table_name('session') . " 161 WHERE " . $DB->unixtimestamp($DB->now())."-".$DB->unixtimestamp('changed') . " > ?", 162 $maxlifetime); 163 } 161 } 162 163 // just delete all expired sessions 164 $DB->query("DELETE FROM " . get_table_name('session') . " 165 WHERE changed < " . $now); 164 166 165 167 rcmail_temp_gc();
Note: See TracChangeset
for help on using the changeset viewer.
