我将会话数据保存在我的数据库(mongodb)上,客户要求他让系统闲置2个小时(他在网站上有视频可能需要2个小时才能完成,所以他要求将会话超时值设置为2小时)。我是按照Zend Framework的建议做到的。请参阅下面的config.php
return array( 'env2_session' => array( 'config' => array( 'class' => 'Zend\Session\Config\SessionConfig', 'options' => array( 'name' => 'test', 'remember_me_seconds' => 7200, 'gc_maxlifetime' => 7200, ), ), 'mongo_handler' => array( 'options' => array( 'class' => 'Zend\Session\SaveHandler\MongoDBOptions', 'collection' => 'sessions', ), ), 'save_handler' => 'Env2Session/Mongo/Handler', 'validators' => array( array( 'Zend\Session\Validator\RemoteAddr', 'Zend\Session\Validator\HttpUserAgent', ), ), ), );
但这不是正确的代码,因为我无法看到会话扩展。 24分钟后它仍然会超时。
如果我添加'cookie_lifetime'=>它会有效'gc_maxlifetime'=>之后的7200 7200但即使我正在使用该网站,这也会得到时间限制。
我只想在系统空闲时才进行超时。请告诉我一些事情。
这是我在Module.php中编写的保存处理程序代码
public function getServiceConfig() { return array( 'factories' => array( 'Env2Session/Mongo/Handler' => function ($sm) { $config = $sm->get('config'); $session = $config['env2_session']; $mongo = $sm->get('Env2\Mongo'); $class = isset($session['mongo_handler']['options']['class']) ? $session['mongo_handler']['options']['class'] : 'Zend\Session\SaveHandler\MongoDBOptions'; $options = array(); $options['collection'] = $session['mongo_handler']['options']['collection']; $options['database'] = $config['db']['mongo']['db_name']; $mongoOption = new $class($options); $sessionSaveHandler = new MongoDB($mongo, $mongoOption); return $sessionSaveHandler; }, 'Env2Session' => function ($sm) { $config = $sm->get('config'); if (isset($config['env2_session'])) { $session = $config['env2_session']; $sessionConfig = null; if (isset($session['config'])) { $class = isset($session['config']['class']) ? $session['config']['class'] : 'Zend\Session\Config\SessionConfig'; $options = isset($session['config']['options']) ? $session['config']['options'] : array(); $sessionConfig = new $class(); $sessionConfig->setOptions($options); } $sessionStorage = null; if (isset($session['storage'])) { $class = $session['storage']; $sessionStorage = new $class(); } $sessionSaveHandler = null; if (isset($session['save_handler'])) { $sessionSaveHandler = $sm->get($session['save_handler']); } $sessionManager = new SessionManager($sessionConfig, $sessionStorage, $sessionSaveHandler); if (isset($session['validator'])) { $chain = $sessionManager->getValidatorChain(); foreach ($session['validator'] as $validator) { $validator = new $validator(); $chain->attach('session.validate', array($validator, 'isValid')); } } } else { $sessionManager = new SessionManager(); } Container::setDefaultManager($sessionManager); return $sessionManager; } ), ); }
答案 0 :(得分:2)
我正在努力解决zend会话超时问题。最后,我为此案例实施了自己的解决方案我设置了在每个请求期间刷新的到期时间。但是如果用户不活动,则时间将过期,会话将被销毁。
我把所有教程都放在这里:http://blog.tulikowski.com/zend-framework-2-implementation-of-session-authentication-timeouts/
答案 1 :(得分:1)
转到autoload / global.php,然后创建或编辑此密钥:
'session_config' => array
(
'cache_expire' => 60*60*2,
'name' => 'sessionName',
'cookie_lifetime' => 60*60*2,
'gc_maxlifetime' => 60*60*2,
'cookie_path' => '/',
'cookie_secure' => FALSE,
'remember_me_seconds' => 60*60*2,
'use_cookies' => true,
),