0

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

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

我想要做的是避免从通过Continue where I left offChrome 上的该选项存储的 cookie 创建会话。

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

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

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

因此,如果我没有弄错,作为该Copntinue where I left off选项的结果透明登录的用户应该具有 IS_AUTHENTICATED_REMEMBERED。

好吧,事实并非如此。现实情况是授权是 IS_AUTHENTICATED_FULLY。

有没有人通过这个?

对这一切有什么想法吗?

谢谢

4

1 回答 1

1

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

授予是IS_AUTHENTICATED_FULLY因为会话在服务器上仍然处于活动状态,而不是因为 Google Chrome 选项。

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

没有记住我选项:

  1. 我登录:在服务器上创建了一个会话。
  2. 我关闭浏览器。
  3. 10 分钟后我回来:会话已过期,因此我必须提供我的凭据。

使用记住选项:

  1. 我登录:在服务器上创建了一个会话,并我的浏览器上创建了一个 cookie,说嘿我已连接
  2. 我关闭浏览器。
  3. 10 分钟后我回来:会话已过期由于 cookie 说嘿我已连接,将自动创建一个新会话。因此,我不必再次提供我的凭据。

在这两种情况下,如果您在前 5 分钟内返回,您将自动登录,因为服务器仍在为您的浏览器处理会话。

于 2012-12-29T01:15:09.757 回答