我是 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)"} []
搜索这个最初表明这不是值得担心的事情,但我没有其他想法。这是我让安全工作正常工作的最后一项任务,这让我很害怕。
我很乐意提供帮助解决这个非常烦人的问题所需的任何其他信息。提前感谢您的任何帮助。