Zend的\\ \\会话和SessionManager cookie_lifetime(Zend\\

2019-09-03 09:06发布

我看到有ZF2会议和超时一些奇怪和令人沮丧的行为。

下面是我用它来建立会话的代码:

    $sessionConfig = new \Zend\Session\Config\StandardConfig();
    $sessionConfig->setOptions(array(
        'cache_expire' => 525949,
        'cookie_domain' => 'mydomain.com',
        'cookie_lifetime' => 31536000,
        'cookie_path' => '/',
        'cookie_secure' => TRUE,
        'gc_maxlifetime' => 31536000,
        'name' => 'mydomain',
        'remember_me_seconds' => 31536000,
        'use_cookies' => TRUE,
    ));

    $sessionManager = new \Zend\Session\SessionManager($sessionConfig);
    $sessionManager->rememberMe(31536000);
    $sessionManager->setSaveHandler(new \Zend\Session\SaveHandler\MongoDB($mongo, $options);
    $session = new \Zend\Session\Container('MY_SESSION', $sessionManager);

当我执行这个代码,该cookie被创建,但到期的会议结束。

如果我改变这样的代码:

    $sessionManager = new \Zend\Session\SessionManager();
    $sessionManager->rememberMe(31536000);
    $sessionManager->setConfig($sessionConfig);
    $session = new \Zend\Session\Container('MY_SESSION', $sessionManager);

该cookie被创建和到期是从现在起一年。

然而,在会话仍然30分左右到期后,即使cookie会保留。

我要的是两者的cookie和session将持续一年。 如何在ZF2做到这一点?

Answer 1:

它看起来像这个问题已与gc_maxlifetime选项的处理做。 在\ Zend的\会话\ SaveHandler \ MongoDB中,这个值是从PHP配置截取,经由ini_get( '的session.gc_maxlifetime');

我没有看到\ Zend的\会议\ SessionManager其中的ini_set()被调用的任何地方。

该解决方案,我认为,是做下列之一:

  1. 编辑php.ini并全局设置的值
  2. 编辑的.htaccess并添加php_value的session.gc_maxlifetime
  3. 扩展\ Zend的\会议\ SessionManager,并添加如果gc_maxlifetime选项供调用的ini_set()的新方法。


文章来源: Zend\\Session\\SessionManager and cookie_lifetime