Symfony身份验证 - 无法通过生产中的登录页面获取

时间:2012-03-26 22:40:40

标签: authentication symfony

我在我的本地开发服务器上设置了Symfony身份验证,它在prod和dev环境中都运行良好,今天我注册了一个域进行测试并将我的代码推送到AWS EC2服务器,我可以登录页面没有问题但是一旦我尝试登录,我就会直接重定向到登录页面而没有任何错误。似乎在提交login_check时,它会直接重定向到/ login。我已尝试使用和不使用调试清除和加热生产缓存,这似乎无法解决问题。我的prod.log文件中没有错误。

有关如何进行问题排查的任何建议?

谢谢。

修改 这显示在开发日志中:

[2012-03-26 22:52:59] security.INFO: Authentication request failed: Your session has    timed-out, or you have disabled cookies. [] []
[2012-03-26 22:52:59] security.DEBUG: Redirecting to /login [] []

修改 每次刷新页面时,我都会得到两个新的cookie sub.domain.com和.domain.com - 如果我在保存会话的/ tmp / dir服务器上查看,每次刷新页面时会创建6个新会话,chrome dev工具中显示的两个都没有内部数据。我的本地开发服务器上不存在此问题。关于什么可能导致这一点的任何建议赞赏!!!

修改 - 解决方案

我从Chrome中删除了Cookie,它突然开始工作了。不知道问题的根源是什么,但现在似乎一切正常。

3 个答案:

答案 0 :(得分:17)

启动Symfony 2.3 require_previous_session configuration中有secure.yml设置,将其设置为false:

    secured_area:
        ...
        form_login:
            ...
            require_previous_session: false

答案 1 :(得分:5)

提示:检查config_prod.yml是否存在细微的配置差异。

我在本地计算机上测试prod环境时遇到了同样的问题;虽然我可以在dev上进行身份验证,但我无法在prod上进行身份验证,这会产生OP提到的错误:

security.INFO: Authentication request failed: Your session has timed-out, or you have disabled cookies. [] []

禁用的Cookie 让我想到了。

接下来,我检查了浏览器中的网络选项卡,并在我的页面请求/响应时达到了顶峰。我发现会话cookie是在服务器的响应中提供的,但是浏览器在请求中没有发送。

然后我有了我的时刻:

我在未加密的连接上使用安全cookie

在我们的生产服务器上,所有未加密的流量都被重定向到TLS连接,因此在prod环境中使用secure cookies是有意义的。 在config_prod.yml

framework:
    session:
        cookie_secure: true

效果是会话cookie将附加secure

Set-Cookie:PHPSESSID=66117caf467ef2bf8efee373b52449ba; path=/; secure; HttpOnly

符合浏览器/用户代理:

  

不会发送带有未加密HTTP请求设置的安全标志的cookie。

这就是php的原生会话处理并不知道或关心安全标志(它是由Symfony添加的),因此会话cookie仍然可以通过未加密的连接发送浏览器(或至少Chrome 35)将以令人费解的方式使用通过不安全/未加密连接收到的安全cookie 。我想这并不令人困惑,服务器负责使会话无效,而不是浏览器。

解决方案

我在本地计算机上设置 https ,这样我就可以测试prod环境而无需进行配置。仅为生产实施仅https连接可以使我的团队更简单,但确实让我感到沮丧。

带走:本地和生产之间更高的平价通常更好!

答案 2 :(得分:2)

嗯,它适用于您的本地服务器,因此您肯定启用了Cookie。 :)

正如我在评论中所说,您应该检查会话是否在php.ini中正确设置。其中包括:

  • " session.save_path",
  • " session.auto_start&#34 ;.

另外,请检查Firebug您是否已收到有效的PHPSESSID Cookie(或任何类似的Cookie,具体取决于您php.ini)。您可能想要检查的另一件事是config.yml文件,如下所示:

session:
        default_locale: %locale%
        auto_start:     true
        lifetime:       86400

这些都是疯狂的猜测,但我怀疑" session.save_path"您的文件系统中不可写 ...