页面加载后,Symfony2会话不会持续存在

时间:2014-06-04 16:26:53

标签: php symfony

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

当提交表单时,操作会通过Symfonys会话处理程序将值存储到会话中,然后重定向到构成表单第二步的另一个操作。我可以在Xdebug中看到值被添加到全局$ _SESSION变量中,但是当我到达第二个操作中的下一个断点时,$ _SESSION变量缺少它在前一个操作上的内容。我没有在任何地方清理会议,正如我所说,它在生产上工作正常。

这几乎就像Symfony没有在页面加载之间存储会话数据一样,是否有人有任何想法?

尝试过的事情

  • 将cookie域添加到配置
  • 将权限设置为777(仅用于测试)
  • PHP版本是一个小的迭代(5.4.28-1 vs 5.4.27-1)

1 个答案:

答案 0 :(得分:2)

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

从说明中引用:

  

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

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

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