【问题标题】:symfony2 session lifetimesymfony2 会话生命周期
【发布时间】:2011-08-21 11:37:35
【问题描述】:

我遇到了 symfony2 会话组件的问题。我通过会话容器将一些数据设置为会话,如下所示:

$sess = $this->get( 'session' );
$sess->set( 'some_key', 'some_value' );

但在一段时间后(大约 15-20 分钟),会话丢失了。

我可以设置会话寿命参数吗?对我来说,完美的变体是如果我可以设置特定的会话时间......有人可以帮忙吗?

【问题讨论】:

    标签: session symfony


    【解决方案1】:

    在 Symfony 2.3 中,我认为正确的答案在 app/config/config.yml:

    framework:
        session:
            cookie_lifetime: 7200
            gc_maxlifetime: 3600
    

    GC(垃圾收集)将在每次服务器被击中时重置,这意味着如果用户处于活动状态,他将有 3600 继续工作。 cookie_lifetime 将强制用户在其限制范围内注销。在此示例中,用户将有 1 小时处于非活动状态,并在 2 小时后被强制退出。

    【讨论】:

      【解决方案2】:

      您可以在配置文件中的framework 部分下设置会话到期时间。我的看起来像这样:

      config.yml

      framework:
        secret:        %secret%
        charset:       UTF-8
        error_handler: null
        csrf_protection:
            enabled: true
        router:        { resource: "%kernel.root_dir%/config/routing.yml" }
        validation:    { enabled: true, annotations: true }
        templating:    { engines: ['twig'] } #assets_version: SomeVersionScheme
        session:
            default_locale: %locale%
            cookie_lifetime: 3600 // was "lifetime" but deprecated
            auto_start:     true
      

      您可以将 framework.session.lifetime 值更改为您想要的任何值,以秒为单位(默认为 3600 或 1 小时)。

      参考here

      【讨论】:

      • 您确定 framework.session.lifetime 默认为一小时吗?你能指出我在代码中看到的地方吗?在 Symfony2 的 NativeSessionStorage 中,我看到默认值来自 PHP 的 session_get_cookie_params(),因此默认的 PHP 会话 cookie 生命周期将为 0(浏览器关闭时到期)。此外,重要的是要注意,即使您更改 PHP 会话 cookie 生命周期,我认为您也必须在 PHP 设置中更改 session.gc_maxlifetime(因为默认为 1440 秒/24 分钟)。见tinyurl.com/6txls7n
      • 当我发布这个答案时,Symfony2 会话生命周期值默认为 3600。检查configuration reference,看起来这已经增加到86400。看起来你是对的,不过。我看到一条注释说session_get_cookie_params() 将覆盖传递的值。
      • 再看一遍,会话生命周期默认为0。哦,哇,错字。也是86,400!我会给他们发一个补丁,看起来有人搞砸了。
      • 哈,他们做到了。并查看 FrameworkBundle 的 DI configuration...lifetime 已被 cookie_lifetime 弃用...看起来这里的文档已经过时了。
      • 是的,在 master 上已弃用(也许这适用于 Symfony2 2.1 版?)。嗯...session_get_cookie_params() 将覆盖传递的值... Symfony2 v2.0 之后的另一个更改我可能不得不适应。 :)
      【解决方案3】:

      为了舒适地工作,您可以在开发环境中设置cookie_lifetime to 0,这意味着cookie在浏览器关闭时过期。

      文件:config_dev.php

        framework:
              session:
                  cookie_lifetime: 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-16
        • 2014-06-15
        • 1970-01-01
        • 1970-01-01
        • 2016-11-21
        • 2014-08-03
        • 2015-03-30
        • 2014-08-10
        相关资源
        最近更新 更多