记住我不工作

时间:2015-01-08 21:59:21

标签: php symfony session cookies

在我的symfony2应用程序中,我正在尝试使用默认启用的“记住我”功能登录用户。 cookie设置正确,但用户在一段时间后退出(我会在一小时左右说一些事情)。这发生在我的开发机器,分段和生产版本上。

security.yml:

firewalls:
    default:
        pattern: ^/
        anonymous: ~
        form_login:
            login_path: frontend_user_login
            check_path: frontend_user_loginCheck
            username_parameter: user[email]
            password_parameter: user[password]
            remember_me: true
        logout:
            path: frontend_user_logout
        remember_me:
             key: "%secret%"
             lifetime: 31536000 # 365 days in seconds
             path: /
             domain: ~ # Defaults to the current domain from $_SERVER

config.yml:

framework:
    session:
        cookie_lifetime: 31536000
        cookie_httponly: true
        handler_id: ~
        name: mycookie

在Chrome中查看我的Cookie,它显示了我:

Name:   mycookie
Content:    hqafha2ut4rpl4bdnh2jhcfm34
Domain: REPLACED
Path:   /
Send for:   Any kind of connection
Accessible to script:   No (HttpOnly)
Created:    Thursday, January 8, 2015 at 10:46:36 PM
Expires:    Friday, January 8, 2016 at 10:46:36 PM

我使用php.ini中的session.save_handler = redis设置将我的会话存储在redis中。在我切换到redis并且在此过程中没有改变之前问题确实存在,所以我认为这不是问题吗?

还有什么我想念的吗?可能有一些我需要注意的php.ini配置吗?

2 个答案:

答案 0 :(得分:1)

我认为这一行会对您有所帮助(只需将其添加到您的登录表单中):

// ../path/to/login.html.twig

<input type="hidden" name="_remember_me" value="1" />

答案 1 :(得分:1)

虽然周杰伦的答案对我有用,但我想回答我自己的问题并详细介绍记住我和会话生命周期的所有不同配置。

记住我

remember_me有一个login_form键(请参阅上面的问题),但它不会做我想做的事情。我仍然不确定它到底是做什么的,但这并不意味着始终假设登录时记住了remember_me的激活。

相反,将always_remember_me: true添加到remember_me中的security.yml配置就可以了。创建名为REMEMBERME的第二个cookie,用于在会话超时时记录用户。

添加名称为_remember_me且值为1的隐藏输入字段也可以。

会话终身

要更改symfony应用程序中的会话生存期,您可以直接更改php.ini中的值,也可以在config.yml中定义这些值。

两种方式,您需要编辑的值为gc_maxlifetime。更改php.ini中的值或将其添加到framework - &gt; session中的config.yml部分,如此处所述:http://symfony.com/doc/current/reference/configuration/framework.html#gc-maxlifetime

我选择更改配置中的值,因为这样可以使dev / staging / production保持一致,而且我不需要混淆不同的php.ini文件。