Zend framework session expires prematurely

前端 未结 5 956
既然无缘
既然无缘 2020-12-14 21:28

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::st         


        
相关标签:
5条回答
  • 2020-12-14 21:52

    I had the same problem and solved it by putting:

    resources.session.save_path = APPLICATION_PATH "/../data/session/"
    resources.session.gc_maxlifetime = 864000
    resources.session.remember_me_seconds = 864000
    

    in the application.ini (as suggested by tawfekov) and

    protected function _initSessions() {
        $this->bootstrap('session');
    }
    

    in the Bootstrap.php (this I typically forgot at first). You have to give the session directory the correct access rights (chmod 777). I described the issue here. Hopefully this will help the next person with the same issue.

    0 讨论(0)
  • 2020-12-14 21:57

    Your client's computer clock, date, AND time zone need to be set correctly for session expirations to work. Otherwise the time conversions are off, and likely causing your cookie to expire the minute it hits the their browser.

    0 讨论(0)
  • 2020-12-14 21:57

    Try calling remember me before starting the session:

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

    Otherwise I believe it will use the default of remember_me_seconds. See 49.4.4. rememberMe(integer $seconds)

    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.

    I don't think that is possible. The session is controlled by whether the cookie exists on the users computer. Those cookies can be deleted, even by the users if they clear their cache. I think the best you can do is set it to a very large number. Say 12 months.

    0 讨论(0)
  • 2020-12-14 22:05

    I guess you are using ZF 1.8 or above , so you can put in the config.ini file

    resources.session.save_path = APPLICATION_PATH "/../data/session" resources.session.remember_me_seconds = 864000

    and these setting will automatically loaded again only in ZF 1.8 or above if not you had to load these config manually i hope it helps you :)

    0 讨论(0)
  • 2020-12-14 22:09

    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

    0 讨论(0)
提交回复
热议问题