Symfony 2会议被破坏

时间:2016-03-14 14:07:26

标签: php symfony session

我对Symfony2会话有一个讨厌的问题。我有一个可以插入东西的推车。我添加了几个项目并且它可以工作,但是在某些项目上应用程序崩溃告诉我 ContextErrorException: Warning: session_start(): Failed to decode session object. Session has been destroyed in ... 会话被销毁,我已退出网站 我将会话存储在数据库中,关于会话的行也被删除,就像一个干净的注销。 我对所有代码进行了三重检查,并且我没有使代码无效的代码。我还评论了包含session->invalidate的每一行都无济于事 我注意到会话清理是在一个函数的“返回”和代码返回后代码中的下一行之间进行的,但它们之间没有代码。它似乎与事件/听众有关,但没有一个是我配置的 我不知道在哪里检查,有什么想法吗?

2 个答案:

答案 0 :(得分:1)

基于this report和其他搜索,我的猜测是你在会话数据中存储多字节字符串并且它已经被破坏了。存储数据的数据库列也可能太短,字符串被截断,破坏它。以下是我要看的内容:

  • 如果您正在使用数据库进行存储,请确保它已为多字节字符串做好准备。
  • 确保您的会话数据库列足够大,例如MEDIUMTEXT代替VARCHAR
  • 也许Symfony的会话处理程序中存在一个错误(不太可能,因为这可能很快被捕获)。
  • 也许你已经以某种方式破坏了自己的多字节字符串。检查您没有使用任何非二进制安全的PHP函数。

如果找不到根本原因,我会尝试覆盖会话存储处理程序并在存储之前对数据运行base64_encode并在检索之后解码。但这是解决真正问题的最后手段。

答案 1 :(得分:0)

我更改了PDOSessionHandler的write e read方法,而不是base64encode / decode,我把utf8_encode用于写入,而在rea​​d方法中我放了utf8_decode。这种解决方法对我有用,但不是一个干净的解决方案。现在的问题是:为什么base64encode / decode会失败?