【问题标题】:Chrome: "continue where I left off" mode and Symfony2Chrome:“从我离开的地方继续”模式和 Symfony2
【发布时间】:2012-12-29 00:20:34
【问题描述】:

使用 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。

有人通过这个吗?

对这一切有什么想法吗?

谢谢

【问题讨论】:

    标签: php security google-chrome symfony fosuserbundle


    【解决方案1】:

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

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

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

    没有记住我选项:

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

    使用记住选项:

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

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

    【讨论】:

    • 好的,感谢您的回复。但我还是没看到。我接受 Chrome 选项和服务器端会话配置是分开的功能这一事实。但是这两个之一:1.我在服务器会话配置中遗漏了一些东西(请告诉我如何更改会话生命周期。2. Chrome 选项是如此“神奇”,它确实以某种方式保存会话并真正恢复它一种到目前为止还不知道的先驱方式。我重复这个行为:用户在 chrome 中创建一个会话,然后关闭浏览器。如果他在两个月后进入 chrome,会话仍然存在。
    • 而且最糟糕的是,我不知道在哪里拦截它的创建(例如,避免创建并重定向到登录页面)
    • 另一个数据:$_COOKIE 的值在创建会话时和两个月前相同。因此,具有相同 ID 的相同会话和所有内容都会以某种方式恢复。
    • 再次感谢,我等你的 cmets :)
    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多