2

我是 FriendsOfSymfony UserBundle 的新手,一切都很顺利,直到我尝试让用户注销。登录工作完美,我使用的是我在许多网站上看到的基本配置。我只有 2 个用户需要登录。当用户单击注销 URL 时会出现问题。在这种情况下/注销。我在浏览器中收到一个通用服务器错误,并且 error_log 显示“脚本头过早结束:app_dev.php”。如果我在错误页面上点击刷新,它会返回我的主页并且我已成功注销。

这是我在 security.yml 中的防火墙部分:

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            check_path: fos_user_security_check
            csrf_provider: form.csrf_provider
        logout: true
        anonymous: true

这是 security.yml 的 access_control 部分:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel:https }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/logout, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }

这是 config.yml 中的 fos_user 部分

fos_user:
    db_driver: orm 
    firewall_name: main
    user_class: Wielding\BassBundle\Entity\User

我正在以我的树枝形式生成注销网址:

<a href="{{ path('fos_user_security_logout') }}">logout</a>

如果我没有登录该站点并且我手动转到注销 url,我将被重定向回默认索引页面而没有任何错误。如果我登录并手动输入注销 url,我会收到服务器错误。我已经尝试了很多配置更改的变体,我什至无法在此处列出它们。他们都失败了。

我什至尝试通过使控制器中的会话无效来编写自己的注销,这会产生相同的错误。

到目前为止,我唯一的线索是 dev.log 中的一个条目:

[2013-07-27 14:51:26] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: SessionHandler::write(): Parent session handler is not open in /home/dev2/app/cache/dev/classes.php line 407" at /home/dev2/app/cache/dev/classes.php line 407 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException: Warning: SessionHandler::write(): Parent session handler is not open in /home/dev2/app/cache/dev/classes.php line 407 at /home/dev2/app/cache/dev/classes.php:407)"} []

搜索这个最初表明这不是值得担心的事情,但我没有其他想法。这是我让安全工作正常工作的最后一项任务,这让我很害怕。

我很乐意提供帮助解决这个非常烦人的问题所需的任何其他信息。提前感谢您的任何帮助。

4

1 回答 1

3

这是PHP的错误。您需要将 php 升级到 minium 5.4.11。

参考:

https://github.com/symfony/symfony/issues/5868

于 2013-07-28T09:09:32.787 回答