【问题标题】:ZF3 session timeout issueZF3 会话超时问题
【发布时间】:2017-12-01 17:32:54
【问题描述】:

我在使用 Zend Framework 3 时遇到了与会话超时相关的问题。会话在 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 中进行配置。

请提供解决方案。

【问题讨论】:

    标签: php zend-framework2 zend-framework3


    【解决方案1】:

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

    我的假设是您不会将此会话管理器设为您的默认设置。为了实现它,您需要尽早实例化它。 一种解决方案是在模块 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

    编辑:我的第二个假设是您为会话使用全局路径(例如 /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”数组中。

    【讨论】:

    • 使用上述代码后会话仍会在 5-10 分钟内过期。请为此提供解决方案。我错过的任何其他会话配置?
    • 你能在你使用会话的地方添加代码以及你如何看待它过期吗?
    • 在 global.php 中使用我上面的代码会话会在 10 分钟内过期。在模块文件中添加代码后会话会在 10 分钟内过期。
    • 你想做什么?是用户登录过期吗?如果是这样,您可以在登录用户的位置添加代码吗?
    • 我希望登录会话至少 30 分钟。我使用了来自github.com/olegkrivtsov/using-zf3-book-samples/blob/master/… 的代码
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多