【问题标题】:How to increase the session lifetime in Symfony2?如何增加 Symfony2 中的会话生命周期?
【发布时间】:2014-06-15 06:36:23
【问题描述】:

我有一个带有记住复选框的登录名。 如果选中了记住复选框,我会尝试将会话生命周期设置为 1 年,但无论我尝试什么,它都不起作用...... Symfony 分析器总是说会话生命周期为 0。

这就是我在控制器功能中尝试过的:

$this->getRequest()->getSession()->set("gesaudit",array("login"=>true,"user"=>$user));

if($remember == "1"){
    $lifetime = new NativeSessionStorage();
    $lifetime->setOptions(array('cookie_lifetime' => 31557600));
}else{
    $lifetime = new NativeSessionStorage();
    $lifetime->setOptions(array('cookie_lifetime' => 0));
}

【问题讨论】:

    标签: php session symfony


    【解决方案1】:

    应该在security.yml配置文件中完成:

    secured_area:
        pattern:  ^/yourpattern
        remember_me:
            key:      "%secret%"
            lifetime: 31536000 # 365 days in seconds
            path:     /yourpath
            domain:   .yourdomain.com
    

    您可以找到相关文档here

    【讨论】:

      【解决方案2】:

      根据documentation,可以通过config.yml 管理正常的会话生命周期:

      framework:
          session:
              cookie_lifetime: 3600
      

      要将生命周期设置为一年:3600*24*365 = 86400*365 = 31536000。简单:)。

      这会将会话 cookie 的生命周期设置为 1 小时。您可以配置许多其他内容,但这就是为什么我提供了文档链接。
      如果您坚持手动执行此操作,在特定案例/控制器中,则将选项数组传递给控制器​​。也许这可以代替使用 setOptions 方法:如果您的 php.ini 包含:

      session.auto_start = 1
      

      然后创建NativeSessionStorage 实例将自动并立即创建会话,具有默认生命周期。之后设置它几乎没有区别。检查您的 ini 设置,或执行以下操作:

      $test = new NativeSessionStorage();
      var_dump($test->isStarted())
      

      如果它转储true,请尝试:

      $lifetime = new NativeSessionStorage(
          array(
              'cookie_lifetime' => 31536000
          )
      );
      

      关于 Symfony2 会话的所有内容都可以在 here 找到。

      如果您使用的是 Symfony2.4,文档中有一个特殊部分处理 remember-me functionality,正如 Jakub Polák 指出的那样。它的本质是复选框必须被称为_remember_me,config.yml 必须定义一个%secret% 值,并且您将其(定制的)版本添加到您的security.yml 文件中:

      firewalls:
          main:
              remember_me:
                  key:      "%secret%"
                  lifetime: 31536000
                  path:     /
                  domain:   ~ # Defaults to the current domain from $_SERVER
      

      但文档解释了这一切,但您必须“浏览”手册一点。例如,如果您想为特定部分指定不同的记住我行为,请更改上面 yml sn-p 中的main,并添加一个pattern 设置,如explained here
      你可能最好扫描the entire security section

      【讨论】:

      • “记住我”功能是 Symfony2 Security 的一部分,因此正确的文档是:symfony.com/doc/current/cookbook/security/remember_me.html
      • 没有仔细阅读这个问题。你是对的,OP提到记住我复选框,将编辑
      • 我没有使用安全组件。我正在尝试用我自己的控制器制作自己的捆绑包,以检查是否有会话是否存在任何请求。这就是为什么我需要在用户登录时“即时”更改会话生命周期。如果用户检查记住我,我需要将会话生命周期设置为 1 年,否则设置为 0。可能吗?
      • @Angel:是的,正如安全扩展文档中所解释的那样。使用这将是最好的前进方式。它具有内置功能,可以根据您的需要/需要为项目的特定部分设置记住我的 cookie。这正是您正在寻找的。​​span>
      • 谢谢。我需要阅读更多相关信息。我会尝试实现你所说的功能。
      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 2020-06-09
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2014-08-03
      相关资源
      最近更新 更多