Alex Rivera | Logout

Zend framework session expires prematurely

Asked 2009-09-28T23:09:22.027
13

I'm using Zend Framework for PHP and handling sessions with the Zend_Session module. This is what I have in my Initializer (or bootstrap):

Zend_Session::start();
Zend_Session::rememberMe(864000);

864000 seconds should be good for 10 days, but I'm still being kicked out at about an hour (or maybe a little less). I've tested to see if this statement works at all by setting it to 10 seconds, and indeed I am kicked out at the appropriate time, but when I set it to a very high value, it doesn't work! I went through some of the documentation here: http://framework.zend.com/manual/en/zend.session.html

Another method I saw was to use the following:

$authSession = new Zend_Session_Namespace('Zend_Auth'); 
$authSession->setExpirationSeconds(3600); 

Now, I have different namespaces. Does this mean I have to set this for all of them if I want to keep them from expiring? I haven't tested this method of setting the expiration, but I really wanted to see what the gurus on here had to say about what the correct way of approaching this problem is. Thanks a lot guys...

Also, does anyone know how I can make it so that the session never expires? I've tried setting the second to 0 and -1, but that throws an error.

Edit
Report

1 Answer

0

Are there other PHP applications running on the server?

Assuming you're using the standard, file-based, session handler, PHP will store all sessions in the same place (typically /tmp).

If you have some other script on the server using the default session_gc_maxlifetime settings, it may be eating your session files.

The easiest fix to try is to configure PHP to store session files for this application someplace special -- that way other apps running on the server will never accidently "clean up" session data from this app.

Try creating a directory like /tmp/myAppPhpSessions (or whatever), and adding:

ini_set('session.save_path','/tmp/myAppPhpSessions');
ini_set('session.gc_maxlifetime', 864000);

at the very top of your bootstrap file.

Make sure session.auto_start is off in php.ini

answered 2009-09-29T00:15:45.353

Your Answer