Chrome:"继续我离开的地方"模式和Symfony2

时间:2012-12-29 00:20:34

标签: php security google-chrome symfony fosuserbundle

使用Symfony2和FOSUserBundle,我没有在以下实现中获得预期的行为。

首先,请知道Chrome中的Continue where I left off选项会完全恢复用户会话,而无需检查某些“记住我”或类似内容。因此,它会保存一个包含会话所有信息的cookie。

我要做的是避免通过Chrome上的Continue where I left off选项存储的Cookie创建会话。

或者,如果我无法避免创建会话,至少要尝试知道会话来自完全透明的方式。

我在Symfony2文档(特别是here)中找到了这个:

  

但是,在某些情况下,您可能希望在访问某些资源之前强制用户实际重新进行身份验证。例如,您可能允许“记住我”用户查看基本帐户信息,但随后要求他们在修改该信息之前实际重新进行身份验证。   安全组件提供了一种简单的方法。除了明确分配给它们的角色之外,用户还将自动获得以下角色之一,具体取决于它们的身份验证方式:   IS_AUTHENTICATED_ANONYMOUSLY - 自动分配给位于站点的防火墙保护部分但未实际登录的用户。只有在允许匿名访问的情况下才可以使用。   IS_AUTHENTICATED_REMEMBERED - 自动分配给通过记住我cookie进行身份验证的用户。   IS_AUTHENTICATED_FULLY - 自动分配给在当前会话期间提供登录详细信息的用户。

因此,如果我没有弄错,那么由于Copntinue where I left off选项透明地登录的用户应该有IS_AUTHENTICATED_REMEMBERED。

嗯,事实是事实并非如此。实际情况是授权是IS_AUTHENTICATED_FULLY。

有没有人通过这个?

对这一切有任何想法吗?

由于

1 个答案:

答案 0 :(得分:1)

会话在服务器端处理。根据服务器的会话生命周期配置,您可以关闭浏览器并重新打开它,而不会丢失会话。这与Google Chrome的Continue where I left off选项无关。

授权为IS_AUTHENTICATED_FULLY,因为会话在服务器上仍然有效,而不是因为Google Chrome选项。

简单示例用例。假设我们设置了5分钟的会话生命周期。

没有记住我选项:

  1. 我登录:在服务器上创建会话。
  2. 关闭浏览器。
  3. 10分钟后我回来了:会话已经过期,因此我必须提供我的证书。
  4. 使用记住选项:

    1. 我登录:在服务器上创建了一个会话 AND 在我的浏览器上创建了一个cookie,上面写着嘿我已经连接
    2. 关闭浏览器。
    3. 10分钟后我回来了:会话已经过期了,因为Cookie已经嘿我已经连接,会自动创建一个新会话。因此,我不必再提供我的凭据。
    4. 在这两种情况下,如果您在前5分钟内回来,您将自动登录,因为服务器仍在为您的浏览器处理会话。