2013-12-11 65 views
2

我有我的Symfony 2应用程序的自定义登录表单。在这个表单中,我有一个选项字段,它有多个选项来设置登录会话的最大空闲时间。我希望能够在登录操作中设置会话生存期。不幸的是,登录存储在FOSUserBundle中,这将不能被修改,因为未来更新的捆绑包。

这就是我发现到目前为止,纠正我,如果我错了:
首先在一段时间后symfony中的生命可以被破坏,如描述here
其次,我必须能够捕获/拦截登录操作/验证以在parameter.yml中设置参数。
然后可以在侦听器中使用该参数来检查maxlifetime是否未超出。

所以我的问题是分裂在其他两个问题:Symfony 2:如何在登录时设置会话生存期?

  1. 如何赶上/拦截登录操作/验证?
  2. 有没有办法创建一个侦听器来检查闲置时间而什么都没有发生(或者可以检查下一个请求)?

在此先感谢

回答

2

我猜,

  1. 您需要登录成功处理程序。阅读以下内容,了解,

    Symfony2 Login and Security

  2. 你也可以写为控制器/内核请求活动您可以比较用户的空闲时间的事件监听。

    http://symfony.com/doc/current/cookbook/service_container/event_listener.html#request-events-checking-types

据我所知,这是不添加参数值,这种要求是一个好主意。

如果您需要销毁用户会话,为什么不在设置身份验证成功处理程序的登录时间(可以将其保存在会话或用户实体上次登录时),以及在控制器侦听器中,您可以比较登录的长度并重置用户会话?

+0

非常感谢。这似乎工作得很好。我还有一个问题:如何在认证处理程序的selectfield中获取存储值?我想这可以用Javascript和AJAX来完成,但我想避免这种情况。如果您已存储在实体中,则为 –

+0

; $ em = $ this-> container-> get('doctrine') - > getEntityManager();因为它是容器意识。 – Chathushka

+0

那就是这个问题。登录表单没有连接到实体(原因很好,它是一个登录表单)。表单发布到我无法控制的FOSUserBundle上。所以在这里使用教义不是一个选项。 –

相关问题