Php Zend\Session\SessionManager和cookie\u生命周期
我在ZF2会话和超时中看到一些奇怪和令人沮丧的行为 下面是我用来设置会话的代码:Php Zend\Session\SessionManager和cookie\u生命周期,php,zend-framework2,session-timeout,Php,Zend Framework2,Session Timeout,我在ZF2会话和超时中看到一些奇怪和令人沮丧的行为 下面是我用来设置会话的代码: $sessionConfig = new \Zend\Session\Config\StandardConfig(); $sessionConfig->setOptions(array( 'cache_expire' => 525949, 'cookie_domain' => 'mydomain.com', 'cookie_lifet
$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和会话都能持续一年。在ZF2中如何实现这一点?看起来这个问题与gc_maxlifetime选项的处理有关。在\Zend\Session\SaveHandler\MongoDB中,该值通过ini_get('Session.gc_maxlifest')从PHP配置中获取 我在\Zend\Session\SessionManager中找不到调用ini_set()的地方 我认为,解决办法是采取以下措施之一:
使用
\Zend\Session\Config\SessionConfig
,而不是StandardConfig
当我使用与上述相同选项的SessionConfig时,不会写入PHPSESSID cookie。我缺少什么?上面的选项表示mydomain
的会话name
?ini\u set
由SessionConfig
类调用,无需编辑任何内容,op只需使用正确的类即可。