【问题标题】:ZF2: Why are my sessions logging out?ZF2:为什么我的会话会退出?
【发布时间】:2015-04-09 22:57:32
【问题描述】:

我的 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 天。还有其他一些我应该查看的设置吗?

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

我有祸了。

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

【问题讨论】:

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


    【解决方案1】:

    会话无效的原因有很多。

    始终检查以下几点:

    • 会话cookie生存期(只有在关闭浏览器时才会失效)
    • 会话生命周期本身
    • zf2 中的cache_expire 键(应高于会话生命周期)

    尝试添加这个

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

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多