Symfony3在登录时立即失去用户会话

时间:2018-04-12 07:57:42

标签: php symfony fosuserbundle symfony-3.4 server-configuration

我将我的Symfony3应用程序从共享主机移动到我刚刚设置的新VPS。当我尝试登录应用程序(使用休闲的FOSUserBundle表单)时,Symfony确实登录我只是为了在下一页重新加载时断开连接。这是“即时”,因为成功登录的第一件事就是重定向到页面。

我尝试了什么:

  • 我禁用了重定向,这让我可以在“login_check”页面上看到我已连接。我知道这是因为Symfony调试工具栏显示了我的名字。重定向后才会再这样了。
  • 我可以随时随地看到我的Cookie中没有PHPSESSID。我认为是负责保持我的Symfony会话活着的cookie。所以...
  • 我尝试了不同的PHP脚本来检查我的VPS配置。它确实可以很好地处理cookie和PHP会话。
  • 我甚至在子文件夹中安装了Wordpress,它可以完美地处理我的会话和cookie。
  • Symfony用于存储会话的服务器文件夹与Wordpress使用的相同。会话文件确实出现在Symfony登录尝试中。 (虽然有时它们只是空文件......!?)
  • 将FOSUB和Symfony升级到最新版本。没有变化。

我正在使用Symfony 3.4.6和FOSUB 2.0.0。有什么想法吗?

更新:Security.yml

# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
    fos_userbundle:
        id: fos_user.user_provider.username_email

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            check_path:     fos_user_security_check
            failure_path:   fos_user_security_login
            login_path: /fr/public/login
            default_target_path: app_homepage
        logout:
            path: fos_user_security_logout
            target: fos_user_security_login
        anonymous:    true


access_control:
    # Allow anonymous logging for these page:
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/fr/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/fr/public/*, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/fr/lab, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/fr/help, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/cron, role: IS_AUTHENTICATED_ANONYMOUSLY }
    # Techs pages
    - { path: ^/_console, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_error, role: IS_AUTHENTICATED_ANONYMOUSLY }
    # Staff only
    - { path: ^/fr/staff/, role: ROLE_STAFF }
    - { path: ^/fr/staff/*, role: ROLE_STAFF }
    # Admin only
    - { path: ^/fr/admin/, role: ROLE_ADMIN }
    - { path: ^/fr/admin/*, role: ROLE_ADMIN }
    # All other pages need to be logged
    - { path: ^/*, role: [IS_AUTHENTICATED_FULLY,IS_AUTHENTICATED_REMEMBERED] }

3 个答案:

答案 0 :(得分:1)

因此,问题在于Cookie和SSL。在我的新服务器上安装我的应用程序时,转移我的SSL证书需要一些时间,因此我的网站的URL是HTTP而不是HTTPS。

浏览器虽然使用了随HTTPS协议添加的名为PHPSESSID的Symfony用户会话cookie。由于未知原因,这个过时的cookie的存在阻止了日志记录,而没有返回任何错误。

另外,我使用的是Firefox的EditThisCookie插件,它没有显示PHPSESSID cookie的存在。虽然浏览器仍然考虑它。

因此,对于遇到相同(非常具体)问题的任何人:查找并删除可能难以找到的PHPSESSID cookie,因为不完全在同一协议下。在Firefox中:Web调试器>存储>饼干。

答案 1 :(得分:0)

您是否尝试过更改:

- { path: ^/fr/public/*, role: IS_AUTHENTICATED_ANONYMOUSLY }

- { path: ^/fr/public, role: IS_AUTHENTICATED_ANONYMOUSLY }

答案 2 :(得分:0)

我有一个类似的问题,但是结果是session.cookie_secure = true(php.ini),测试站点是HTTP(不是HTTPS)

; http://php.net/session.cookie-secure session.cookie_secure = false