php - ZF3 session 超时问题

标签 php zend-framework2 zend-framework3

我一直面临与使用 Zend Framework 3 的 session 超时相关的问题。 session 在 5-10 分钟内过期。我使用了 session 的默认代码,Zf3 骨架在 global.php 中提供了如下代码。

// Session configuration.
'session_config' => [   
  'cookie_lifetime' => 60*60*1, // Session cookie will expire in 1 hour.
  'gc_maxlifetime' => 60*60*1,  // Store session data on server maximum for 1 hour. 
],

// Session manager configuration. 
'session_manager' => 
[
   'validators' => [
      RemoteAddr::class,
      HttpUserAgent::class,
    ]
],

// Session storage configuration.
'session_storage' => [
   'type' => SessionArrayStorage::class 
],

使用上面的代码后 session 仍然在 5-10 分钟内过期。我希望 session 过期时间超过 30 分钟。如何在 Zf3 中配置它。

请提供解决方案。

最佳答案

您对 session 管理器进行了正确的设置,但这还不足以将这些 session 设置用作默认设置。

我的假设是您没有将此 session 管理器设置为默认管理器。为了制作它,您需要尽早实例化它。 一种解决方案是在模块 Module.php

中执行此操作
use Zend\Mvc\MvcEvent;
use Zend\Session\SessionManager;

class Module
{
    //...

    /**
     * This method is called once the MVC bootstrapping is complete. 
     */
    public function onBootstrap(MvcEvent $event)
    {
        $application = $event->getApplication();
        $serviceManager = $application->getServiceManager();

        // The following line instantiates the SessionManager and automatically
        // makes the SessionManager the 'default' one.
        $sessionManager = $serviceManager->get(SessionManager::class);
    }
}

Reference

编辑:我的第二个假设是您使用 session 的全局路径(例如/var/lib/php/sessions)。

在 Debian 中,有一个 cron 可以根据您的 php.ini session 设置(/etc/cron.d/php)清除 session 。

此 cron 使用您的 php.ini“gc_maxlifetime”并可能清除您的 session 。

要找出 session 的保存位置,请使用session_save_path()。检查您的 session 目录。

为了克服这个问题,你应该设置“save_path”,并且这个路径不应该与你服务器上的其他应用程序或脚本共享(你不希望另一个脚本使用全局 gc 设置或它自己的, 删除你的 session )。

添加

'save_path'           =>   '/path/to/app/data/sessions'

在您的“session_config”数组中。

关于php - ZF3 session 超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44801013/

相关文章:

PHP shmop id 引用和数组大小

mysql - 学说 - 数据库表示

php - ZF2 使用 PHP5 与 PHP7

php - 如何将第一个下拉值设置为无

php - 使用内置的 laravel 5.3 功能或 dingo 来创建 API?

zend-framework2 - ZF2 : How to set form elements to be ignored?

php - 如何在 Zend Framework 2 中使用事务运行 MySQL 查询

php - ACL授权失败后ZF3重定向

php - 是否有必要在 laravel 中为数据库操作创建模型(用于查询生成器)?

php - Doctrine2 完整性约束违规 : 1048 while inserting 2 one-to-one assications