If you need to run gc more often, you can create Session model and override 
deleteAll() to fix that $expires

On Wednesday, August 1, 2012 11:21:23 PM UTC+2, majna wrote:
>
> 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 <crazy...@gmail.com>
>
>> 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
>> cake-php+unsubscr...@googlegroups.com 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
cake-php+unsubscr...@googlegroups.com For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to