X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FSession.php;h=166b89815a85bd42cee95381cc8b7f5484f16633;hb=6c236ab0ff4309c883d7856324f409e043f7db56;hp=2422f8b68ecf975dd3794a051917f6fc495a7a02;hpb=292ac40cae211d209899d1e13148483585483330;p=quix0rs-gnu-social.git diff --git a/classes/Session.php b/classes/Session.php index 2422f8b68e..166b89815a 100644 --- a/classes/Session.php +++ b/classes/Session.php @@ -156,6 +156,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()) { @@ -178,6 +185,18 @@ class Session extends Memcached_DataObject $result = session_set_save_handler('Session::open', 'Session::close', 'Session::read', 'Session::write', 'Session::destroy', 'Session::gc'); self::logdeb("save handlers result = $result"); + + // PHP 5.3 with APC ends up destroying a bunch of object stuff before the session + // save handlers get called on request teardown. + // Registering an explicit shutdown function should take care of this before + // everything breaks on us. + register_shutdown_function('Session::cleanup'); + return $result; } + + static function cleanup() + { + session_write_close(); + } }