2013-11-20 32 views
1

工作会议寿命和记得我我想要的会话超时..即5分钟。但我也想记住我的功能,超时8小时。如何使其在Symfony2中

所以我设置会话超时与此config.yml:

session: 
    cookie_lifetime: 300 

然后我设置在security.yml与此记得我超时:

firewalls: 
    main:    
     remember_me: 
      key: '%secret%' 
      lifetime: 28800 
      path:/
      domain: ~  

所以,如果我在5分钟内继续工作,然后注销,一切都会正常进行。但是,如果我保持非活动状态超过5分钟(会话超时),然后我退出,我将自动通过记住我的Cookie进行身份验证。因此,如果我想注销,我必须在注销链接中单击两次。

我应该怎么做才能让他们一起工作?

回答

2

嘿,这花了一些时间来追查。 :-p

快速回答:由于this提交的第92行,因此不会调用注销处理程序(因此,REMEMBERME cookie不会被删除),除非securityContext中存在令牌(即用户已登录)。

较长的回答:AbstractRememberMeServicescancelCookie方法处理删除REMEMBERME令牌。 RememberMeFactory确保该抽象类的实现(通过涉及security.authentication.rememberme.services.*服务的一个令人费解的一些服务查找)与LogoutListener注册。

LogoutListenerFirewall的听众之一)应该通过它的所有处理迭代(实现LogoutHandlerInterface),称他们的logout方法。你可能会使用PersistentTokenBasedRememberMeServices,其业务ID为security.authentication.rememberme.services.persistent,其logout方法调用上述cancelCookie方法,从而消除所谓的与rememberMe饼干。

但由于我上面所解释的,它绝不会为未登录谁(由于有过期的会话)的用户。相反,logoutSuccessHandler将重定向您,并在以下请求中将其余的REMEMBERME Cookie启动。


我不知道这是否应该被认为是一个错误(意外的提交副作用)与否。也许我们中的一个应该submit it,看看开发者对它做了什么?

:-)