在我的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配置吗?
答案 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
文件。