Zend Framework 2会话的生命周期

时间:2013-10-22 18:14:20

标签: php session zend-framework2

我正在尝试使用\Zend\Session\Container设置会话的最长生命时间。为了测试它,我把它放到1秒。

现在我查看了docs

所以我做了

$config = new StandardConfig();
$config->setOptions(array(
    'remember_me_seconds' => 1,
));
$manager = new SessionManager($config);
$session = new Container('user', $manager);

但没有成功。然后我开始谷歌搜索并找到this answer

所以我把配置改为

return array(
    'session' => array(
        'remember_me_seconds' => 2419200,
        'use_cookies' => true,
        'cookie_httponly' => true,
    ),
);

(配置工作并加载到管理器中)但是再次没有成功

所以我继续搜索并找到this answer

但又没有成功。

所以在经过所有搜索后我无法正常工作,所以现在我希望其他人能让它工作并帮助我。

3 个答案:

答案 0 :(得分:6)

好吧,我最终发现了问题所在。

问题是我用过

$sessionConfig = new SessionConfig();
$sessionConfig->setOptions(array(
    'use_cookies' => true,
    'cookie_httponly' => true,
    'gc_maxlifetime' => $config['authTimeout'],
));
$manager = new SessionManager($sessionConfig);

这"工作"唯一的问题是设置了一个生命周期session的cookie。这在浏览器中有不同的东西。即如果你关闭标签,它就会被破坏,所以无论gc_maxlifetime有多高都不行。

因此,以下

可以轻松解决
$sessionConfig = new SessionConfig();
$sessionConfig->setOptions(array(
    'use_cookies' => true,
    'cookie_httponly' => true,
    'gc_maxlifetime' => $config['authTimeout'],
    'cookie_lifetime' => $config['authTimeout'],
));
$manager = new SessionManager($sessionConfig);

希望它会对未来的某个人有所帮助

$config['authTimeout']是一个正整数值

答案 1 :(得分:0)

$config = new StandardConfig();
$config->setOptions(array(
    'cookie_lifetime' => '2419200',
    'gc_maxlifetime' => '2419200'
));

2419200的值更改为您实际需要的秒数。

答案 2 :(得分:0)

在应用程序global.php中,您可以在模块配置中执行此操作:

 'session_config' => array(
    'name' => 'your session name',
    'remember_me_seconds' => 60 * 60 * 24 * 30*3,
    'use_cookies' => true,
    'cookie_httponly' => true,
),

检查Zend \ Session \ Service \ SessionConfig。