]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Session.php
Translator documentation added/updated.
[quix0rs-gnu-social.git] / classes / Session.php
index 2422f8b68ecf975dd3794a051917f6fc495a7a02..166b89815a85bd42cee95381cc8b7f5484f16633 100644 (file)
@@ -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();
+    }
 }