我一直面临与使用 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);
}
}
编辑:我的第二个假设是您使用 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/