繁体   English   中英

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

[英]Symfony3 loses user session instantly on login

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

我试过了

  • 我禁用了重定向,这使我可以在“ login_check”页面上看到已连接。 我知道这是因为Symfony Debug Toolbar显示了我的名字。 重定向后不再。
  • 我可以随时在任何地方看到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] }

因此,问题同时存在于cookie和SSL中。 在新服务器上安装我的应用程序时,传输我的SSL证书花费了一些时间,因此我网站的URL是HTTP而不是HTTPS。

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

另外,我使用的是Firefox的EditThisCookie插件,该插件未显示PHPSESSID cookie的存在。 尽管浏览器仍在考虑。

因此,对于遇到相同(非常特定)问题的任何人:查找和删除可能很难找到的PHPSESSID cookie,因为它不是完全基于同一协议。 在Firefox中:Web调试器>存储> Cookies。

您是否尝试过更改:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM