Merge branch 'master' into testing

Conflicts:
	classes/Profile.php
This commit is contained in:
Brion Vibber 2011-01-31 11:50:06 -08:00
commit 47f31bce47
3 changed files with 26 additions and 3 deletions

View File

@ -87,6 +87,7 @@ class Session extends Memcached_DataObject
$session->id = $id;
$session->session_data = $session_data;
$session->created = common_sql_now();
$session->modified = common_sql_now();
$result = $session->insert();
@ -108,6 +109,7 @@ class Session extends Memcached_DataObject
$orig = clone($session);
$session->session_data = $session_data;
$session->modified = common_sql_now();
$result = $session->update($orig);
@ -156,6 +158,13 @@ class Session extends Memcached_DataObject
$session->selectAdd();
$session->selectAdd('id');
$limit = common_config('sessions', 'gc_limit');
if ($limit > 0) {
// On large sites, too many sessions to expire
// at once will just result in failure.
$session->limit($limit);
}
$session->find();
while ($session->fetch()) {

View File

@ -513,7 +513,20 @@ profile_id = K
id = 130
session_data = 34
created = 142
modified = 384
modified = 142
; Warning: using DB_DATAOBJECT_MYSQLTIMESTAMP (256) causes DB_DataObject
; to SILENTLY REMOVE ATTEMPTS TO SET THIS FIELD DIRECTLY, which is pretty
; bad because the default behavior for auto-updated TIMESTAMP fields is
; to use local time. Local time can't be compared to UTC in any useful
; way, so doing that breaks session GC.
;
; Instead we'll use the plain datetime settings so it'll actually save the
; UTC value we provide when updating.
;
; Long-term fix: punch MySQL in the face until it understands that local
; time is a tool of the cyber-devil.
;
;modified = 384
[session__keys]
id = K

View File

@ -269,8 +269,9 @@ $default =
'search' =>
array('type' => 'fulltext'),
'sessions' =>
array('handle' => false, // whether to handle sessions ourselves
'debug' => false), // debugging output for sessions
array('handle' => false, // whether to handle sessions ourselves
'debug' => false, // debugging output for sessions
'gc_limit' => 1000), // max sessions to expire at a time
'design' =>
array('backgroundcolor' => null, // null -> 'use theme default'
'contentcolor' => null,