ZF3会话超时问题



我一直面临与会话超时使用Zend Framework相关的问题。会话在5-10分钟内到期。我已经使用了会话的默认代码,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 
],

使用上述代码仍然在5-10分钟内仍会过期。我希望会话过期的时间超过30分钟。如何在ZF3中进行配置。

请提供解决方案。

您拥有适用于会话管理器的正确设置,但这还不足以将这些会话设置用作默认设置。

我的假设是,您不会让此会话管理器成为您的默认管理器。为了做到这一点,您需要尽早实例化。一种解决方案是在模块 Module.php

中这样做
use ZendMvcMvcEvent;
use ZendSessionSessionManager;
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);
    }
}

参考

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

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

此cron使用您的php.ini" gc_maxlifetime",可能会清除您的会话。

要找出节省会话的位置,请使用 session_save_path((。检查该目录中的会话。

要克服这一点,您应该设置" save_path" ,并且此路径不应与服务器上的其他应用程序或脚本共享(您不希望使用全局GC设置或自己的其他脚本,删除您的会话(。

添加

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

在您的'session_config'数组中。

最新更新