ZF2:为什么我的会话退出了?

时间:2015-04-09 22:57:33

标签: php zend-framework2 session-timeout zend-session

我的ZF2应用程序在短时间不活动后退出 - 比如60分钟左右 - 我无法理解原因。

我有一个'auth'对象,它是一个组成Zend\Session\Container实例的单例。它的构造函数使用以下行创建容器:

$this->session = new Container('Auth');

auth对象具有login()方法,该方法使用以下行存储当前用户:

$this->getSession()->userId = $user->id;

auth对象还有一个isLoggedIn()方法,用于测试状态,如下所示:

if ($this->getSession()->userId) {
     return true;
}
return false;

这一切都很简单。然而,当引导程序不时检查我们是否已登录时,它会返回false。为什么呢?

以下是会话管理器中配置的打印输出:

'cookie_domain' => '',
'cookie_httponly' => false,
'cookie_lifetime' => 604800,
'cookie_path' => '/',
'cookie_secure' => '',
'name' => 'MyApplication',
'remember_me_seconds' => 1209600,
'save_path' => '/var/lib/php5',
'use_cookies' => true,

如您所见,remember_me_secondscookie_lifetime分别设为2周和7天。还有其他一些我应该关注的环境吗?

我在某处读到默认保存处理程序'file'不支持并发。我的引导程序还会使用session container打开new Container('Auth')到auth命名空间。这可能与auth singleton中的Container冲突吗?我对此表示怀疑,因为问题很可能发生在高活动期间(而不是在一段时间不活动之后)。此外,我希望看到一个例外。

我是祸。

编辑:值得注意的是,会话ID在注销或重新登录时不会更改。

1 个答案:

答案 0 :(得分:0)

会话可能无效的原因有很多。

始终检查以下几点:

  • 会话cookie生存期(仅在关闭浏览器时才会变为无效)
  • 会话生命周期本身
  • zf2中的cache_expire键(应该高于会话生存期)

尝试添加此

    //NEW SECTION
    'cache_expire'         => 60 * 26, <-- this may help
    'gc_maxlifetime'       => 60 * 60 * 24, <-- or this