gpt4 book ai didi

php - Zend\Session\SessionManager 和 cookie_lifetime

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:40 26 4
gpt4 key购买 nike

我发现 ZF2 session 和超时有一些奇怪且令人沮丧的行为。

这是我用来设置 session 的代码:

    $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 被创建,但过期时间是 session 结束。

如果我这样修改代码:

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

cookie 已创建,有效期为一年后。

但是,即使 cookie 仍然存在, session 仍会在 30 分钟左右后过期。

我想要的是 cookie 和 session 都持续一年。我如何在 ZF2 中完成此操作?

最佳答案

看起来问题与 gc_maxlifetime 选项的处理有关。在\Zend\Session\SaveHandler\MongoDB 中,这个值通过 ini_get('session.gc_maxlifetime'); 从 PHP 配置中获取;

我在\Zend\Session\SessionManager 中没有看到调用 ini_set() 的任何地方。

我认为解决方案是执行以下操作之一:

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

关于php - Zend\Session\SessionManager 和 cookie_lifetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16567673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com