Oh, It's in 1.3, but yeah, it's kind of a bug It should be time() + $expires as PHP passes gc_maxlifetime to callback so it never deletes old sessions.
But Cake fires gc() in __close() method too: http://api13.cakephp.org/view_source/cake-session/#l-709 Try to test by increasing $probability var to 150 2012/8/1 Crazy <[email protected]> > The function is getting called just fine, that's not the problem. > At first I thought it was something with the php settings or cake settings. > But the session_save_handlers are pure php, and I have the default > settings + nothing cake related is put in between in the gc function. > > > On Wednesday, August 1, 2012 9:32:38 PM UTC+2, majna wrote: >> >> By default there is 1% chance for gc to be called by PHP. >> If you want to test if gc() is fired, increase *session.gc_probability *close >> to *divisor*: >> http://www.php.net/manual/en/**session.configuration.php#ini.** >> session.gc-probability<http://www.php.net/manual/en/session.configuration.php#ini.session.gc-probability> >> Then watch SQL log for that query. >> >> Anyway, expires should be current timestamp + Session.timeout config >> I know, PHP and sessions - nothing but sorcery :D >> >> On Wednesday, August 1, 2012 9:12:13 AM UTC+2, Crazy wrote: >>> >>> I'm having some issues with my sessions. >>> >>> It's probably configuration somewhere, but don't know what to >>> change/where to look. >>> >>> I'm using database sessions for my cake application, these sessions are >>> not getting cleaned up. >>> >>> The app in question I have the issue on is an old one written on 1.3.10 >>> running with php version 5.3.5. The garbage collection function in the 2.x >>> branch is the same so don't think the framework version will matter. >>> >>> I've tracked down the issue to the function __gc located in the >>> CakeSession class and that function is registered there in the php >>> session_set_save_handler function, this is the function in question: >>> >>> /** >>> * Helper function called on gc for database sessions. >>> * >>> * @param integer $expires Timestamp (defaults to current time) >>> * @return boolean Success >>> * @access private >>> */function __gc($expires = null) { >>> $model =& ClassRegistry::getObject('**Session'); >>> >>> if (!$expires) { >>> $expires = time(); >>> } >>> >>> $return = $model->deleteAll(array($model**->alias . ".expires <" => >>> $expires), false, false); >>> return $return; >>> } >>> >>> Now, the comments say that $expires is a timestamp, but this isn't >>> correct according to the php docs: >>> >>> >>> gc($lifetime) >>> The garbage collector callback is invoked internally by PHP periodically in >>> order to purge old session data. The frequency is controlled by >>> session.gc_probability and session.gc_divisor. The value of lifetime which >>> is passed to this callback can be set in session.gc_maxlifetime. Return >>> value should be TRUE for success, FALSE for failure. >>> >>> The value for $lifeime, so gc_maxlifetime in php.ini is the following: >>> >>> >>> ; After this number of seconds, stored data will be seen as 'garbage' and >>> ; cleaned up by the garbage collection process.session.gc_maxlifetime = 3600 >>> >>> So this results in a query that never deletes anything: >>> >>> delete from cake_sessions where expires < 3600; >>> >>> Could someone clarify what I'm doing wrong or if this is an issue in >>> cake itself? >>> >>> >>> I've posted this on ask.cakephp.org as well, when I find >>> the answer I'll make sure to update both locations. >>> >>> http://ask.cakephp.org/**questions/view/database_** >>> sessions_garbage_collection_**issue<http://ask.cakephp.org/questions/view/database_sessions_garbage_collection_issue> >>> >>> >> -- > Our newest site for the community: CakePHP Video Tutorials > http://tv.cakephp.org > Check out the new CakePHP Questions site http://ask.cakephp.org and help > others with their CakePHP related questions. > > > To unsubscribe from this group, send email to > [email protected] For more options, visit this group > at http://groups.google.com/group/cake-php > -- Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cake-php
