我一直面临与使用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中配置它。
请提供解决方案。
答案 0 :(得分:0)
您具有会话管理器的正确设置,但这不足以将这些会话设置用作默认设置。
我的假设是您不会将此会话管理器设为默认会话管理器。为了实现它,您需要尽早实例化它。 一个解决方案是在模块 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);
}
}
编辑:我的第二个假设是您使用会话的全局路径(例如/ 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'数组中。