【问题标题】:Remember me not working记住我不工作
【发布时间】:2015-01-08 21:59:21
【问题描述】:

在我的 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 配置?

【问题讨论】:

    标签: php symfony session cookies


    【解决方案1】:

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

    // ../path/to/login.html.twig
    
    <input type="hidden" name="_remember_me" value="1" />
    

    【讨论】:

      【解决方案2】:

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

      记住我

      login_form 有一个 remember_me 键(请参阅我上面的问题),但它并没有像我想的那样做。我仍然不确定它到底做了什么,但这并不意味着登录总是被认为是激活了 remember_me。

      相反,将always_remember_me: true 放入remember_me 配置中的security.yml 就可以了。如果会话超时,则会创建名为 REMEMBERME 的第二个 cookie 并用于登录用户。

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

      会话寿命

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

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

      我选择更改我的配置中的值,因为这使 dev/staging/production 的值保持不变,而且我不需要弄乱不同的 php.ini 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 2011-03-24
        • 1970-01-01
        • 2018-03-07
        • 2012-03-28
        • 2014-01-22
        • 2021-05-21
        相关资源
        最近更新 更多