Symfony2会话在页面加载后不持久


Symfony2 sessions aren't persisting after page load

我有一个Symfony2网站的问题。我已经在生产服务器上运行了代码库,这绝对没问题,但我正试图让另一个开发人员开始这个项目,我们在构建和运行时遇到了问题。环境几乎是相同的,开发人员正在使用一个Vagrant实例,该实例上的相同配置用于在AWS上配置EC2实例。

当一个表单被提交时,在重定向到另一个动作(构成表单的第二步)之前,操作通过并使用Symfonys会话处理程序将值存储到会话。我可以在Xdebug中看到值被添加到全局$_SESSION变量中,但是当我在第二个操作中到达下一个断点时,$_SESSION变量丢失了它在前一个操作中的内容。我没有在任何地方清除会话,正如我所说的,它在生产中工作得很好。

就好像Symfony在页面加载之间不存储会话数据,有人有什么想法吗?

事情试过

  • 添加cookie域到配置
  • 设置权限为777(只是为了测试)
  • PHP版本是一个小的迭代(5.4.28-1 vs5.4.27-1)

我在从PHP 5.4.27升级到PHP 5.4.28后遇到了类似的问题,在我的情况下,它与以下错误有关:https://bugs.php.net/bug.php?id=66171

引自描述:

第二个问题:当会话。Save_path是一个目录每个人都可以写(就像在Debian上),即使不可能如果本地攻击者查找到现有会话的id,则只需创建一个新的带有恶意会话数据的会话文件,chmod为666使用他选择的会话ID访问系统上托管的任何web应用程序。然后,web应用程序打开会话文件并将其视为已经打开创建它。我的修复:fstat()会话,检查创建的uid该文件。如果它既不是getuid()的结果也不是uid 0的结果,则忽略现有的文件。

它们现在比较会话文件的所有者与执行PHP脚本的用户,如果uid不匹配,会话文件将被忽略。在我的示例中,apache用户通过组权限对会话文件具有写访问权限,但是由于uid不匹配,PHP不会加载会话文件。

查看您的会话文件(您可以在php.ini文件中找到保存路径),并确保文件的所有者与试图访问它们的用户匹配。