Symfony 2:如何在登录时设置会话生命周期?

3

我有一个自定义的Symfony 2应用程序登录表单,在这个表单中,我有一个选择字段,可以设置登录会话的最大空闲时间。我希望能够在登录操作中设置会话的生存周期。不幸的是,登录操作存储在FOSUserBundle中,由于将来可能会更新该捆绑包,因此无法修改。

到目前为止,这是我发现的情况,请纠正我是否错了:
首先在Symfony中,生存周期可以在一段时间后销毁,如这里所述。

其次,我必须能够捕获/拦截登录操作/验证,以在 parameter.yml 中设置参数。

然后该参数可以用于监听器,以检查是否超过了最大生命周期。

因此,我的问题分为两个子问题:

  1. 如何捕获/拦截登录操作/验证?
  2. 是否有一种方法可以创建一个侦听器,在什么都不发生时检查空闲时间(或者下一个请求上是否可以检查)?
1个回答

2

我猜您需要一个登录成功处理程序。 阅读以下内容以了解更多信息:

  1. 您可以阅读以下内容了解如何实现:“Symfony2登录和安全”

    Symfony2 Login and Security

  2. 您还可以编写一个事件侦听器来监听控制器/内核请求事件,从而比较用户的空闲时间。

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

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

如果你需要销毁用户会话,为什么不在认证成功处理程序中设置登录时间(可以将其保存在会话或用户实体最后登录中),然后在控制器侦听器中比较登录时长并重置用户会话呢?


非常感谢。这似乎运行得很好。我还有一个额外的问题:如何在身份验证处理程序中获取selectfield中存储的值?我猜可以用JavaScript和AJAX来实现,但我想避免使用它们。 - undefined
如果你已经将其存储在一个实体中;$em = $this->container->get('doctrine')->getEntityManager(); 因为它是容器感知的。 - undefined
那就是问题所在。登录表单没有与实体连接(因为它只是一个登录表单)。该表单被提交到我无法控制的FOSUserBundle上。所以在这里不能使用Doctrine。 - undefined
好的,一个事情,在成功处理程序中,你可以将最后登录时间添加到实体中,或者你可以将其保存在会话中,是吗?因为你在onAuthenticationSuccess()中注入了Request,所以你可以从会话中获取它吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接