我希望会话超时..即5分钟。但我也想记住我的功能,超时8小时。
所以我用config:
在config.yml中设置会话超时session:
cookie_lifetime: 300
然后我在security.yml中设置了记住我的超时:
firewalls:
main:
remember_me:
key: '%secret%'
lifetime: 28800
path: /
domain: ~
所以,如果我在5分钟内继续工作然后我退出,一切顺利。但是,如果我保持非活动状态超过5分钟(会话超时)然后我退出,我会自动通过记住我的cookie进行身份验证。因此,如果我要注销,我必须在Logout链接中单击两次。
我该如何让它们一起工作?
答案 0 :(得分:2)
快速回答:由于this提交的第92行,未调用注销处理程序(因此,不删除REMEMBERME cookie),除非securityContext中有令牌(即用户已登录) )。
更长的答案:AbstractRememberMeServices
的cancelCookie
方法处理删除REMEMBERME令牌。 RememberMeFactory
确保使用LogoutListener
注册此抽象类的实现(通过一些涉及security.authentication.rememberme.services.*
服务之一的复杂服务查找)。
LogoutListener
(Firewall
的一个侦听器)应该遍历其所有处理程序(实现LogoutHandlerInterface
),并调用它们的logout
方法。您可能正在使用PersistentTokenBasedRememberMeServices
,其服务ID为security.authentication.rememberme.services.persistent
且其logout
方法调用上述cancelCookie
方法,因此可能会删除REMEMBERME Cookie。
但是由于我上面解释的内容,从未为未登录的用户调用(由于会话已过期)。相反,logoutSuccessHandler会重定向您,并在以下请求中将剩余的REMEMBERME cookie启动。
我不确定这是否应该被视为错误(提交的意外副作用)或不是。也许我们中的一个人应该submit it并看看开发者对它的看法是什么?
: - )