Symfony 3.1.5警告:SessionHandler :: read():您的uid不会创建会话数据文件

时间:2016-10-11 14:52:47

标签: php apache session symfony

我在由Vagrant 1.8.6 / VirtualBox 5.1.6管理的Ubuntu 14.04,PHP 7.1和Apache 2.4.23堆栈上运行Symfony 3.1.5。我正在尝试使用一个简单的控制器来为我的前端渲染响应:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\BrowserKit\Response;

class LandingController {
    /**
     * @Route("/", name="homepage")
     */
    public function showAction(){
        return new Response('This is the landing page!');
    }
}

当我尝试通过/app_dev.php访问我的Symfony前端时,我看到:

Warning: SessionHandler::read(): Session data file is not created by your uid 500 Internal Server Error - ContextErrorException

我的Apache日志显示:

CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: SessionHandler::read(): Session data file is not created by your uid" at /var/www/conan/var/cache/dev/classes.php line 366

Symfony开发日志显示:

==> /var/www/conan/var/logs/dev.log <== [2016-10-11 14:23:04] request.INFO: Matched route "{route}". {"route":"homepage","route_parameters":{"_controller":"AppBundle\\Controller\\LandingController::showAction","_route":"homepage"},"request_uri":"http://conan.dev/app_dev.php/","method":"GET"} [] [2016-10-11 14:23:04] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: SessionHandler::read(): Session data file is not created by your uid" at /var/www/conan/var/cache/dev/classes.php line 366 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException(code: 0): Warning: SessionHandler::read(): Session data file is not created by your uid at /var/www/conan/var/cache/dev/classes.php:366)"} []

看来这似乎是与会话相关的问题,我已经提到了Session Management的Symfony文档。它声明:

  

Symfony会话与php.ini指令session.auto_start = 1不兼容该指令应在php.ini,webserver指令或.htaccess中关闭。

session.auto_start = 0中的

php.ini,该文件归用户和群组root所有:

$ ls -lta /etc/php/7.1/fpm/php.ini -rw-r--r-- 1 root root 70584 Sep 30 07:29 /etc/php/7.1/fpm/php.ini

我已尝试根据Symfony文档中的说明创建.htaccess(我放在我的DocumentRoot中),但错误仍然存​​在。

我已经搜索了几个线程和问题以寻找解决方案,但还没有找到任何解决方案。是什么原因引起了这个?

11 个答案:

答案 0 :(得分:49)

修改config/config.yml并将save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"替换为save_path: /var/lib/php/sessions修复错误。

如果您使用自动将空格转换为标签的编辑器/ IDE,请务必在保存更改之前禁用该功能。如果不这样做,可能会导致“不包含有效的YAML”错误。

答案 1 :(得分:16)

我遇到了同样的问题。对我有用的修复方法是将var/sessions所有者更改为www-data:www-data(php-fpm子流程的相同用户/组):

sudo chown -R www-data:www-data var/sessions/

答案 2 :(得分:15)

AVOID更改prod配置以解决仅在开发环境中出现的问题

使用Vagrant(PHP-FPM 7 + Nginx)和同步文件夹(/ vagrant~default)时遇到同样的问题

解决了刚才的问题

    session:
        save_path: '/tmp'
框架 条目

中的 config_dev.yml

只需选择Webserver和PHP可以在没有权限问题的情况下读/写的地方。

答案 3 :(得分:7)

如果 Magento 2 生成此警告,

只需删除已在var/session文件夹中存在的会话及其已修复

答案 4 :(得分:4)

我遇到了类似的问题,清除浏览器的缓存和存储的数据解决了这个问题。

在chrome和opera上你应该:

Developer tools > Application > Clear Storage > Clear Site Data

答案 5 :(得分:3)

就我而言, *删除浏览器Cookie修复了问题。我没有做上面提到的任何步骤,并尝试更改权限,但不是没有这不是问题。我遇到了关于magento的问题。

答案 6 :(得分:1)

无法写入会话路径,因为会话文件夹中的Web用户和内容所有者不同,因此不会。

解决方案是将/ var或/ var / sessions / ownership设置为Web用户。

chown apache:apache / var / -R * 要么: chown www-data:www-data / var / -R *

最高评价的回应并不是最好的回应。

答案 7 :(得分:0)

我正在使用基于symfony 3的PIMCORE。 要解决此问题,我刚刚清除了浏览器缓存。

我希望这会有所帮助。

答案 8 :(得分:0)

如果您对同步文件夹使用NFS,则其中所有文件的UID和GID将是运行Vagrant的 host 用户的UID和GID,并且可能与UID和vagrant用户在访客上的GID。例如,我有:

-rw-r--r--  1  501 dialout 5.1K Oct 29 15:14 Vagrantfile

501是我的用户在Mac上的UID,来宾上没有相应的用户。 dialout是与Mac上主要群组staff匹配的来宾群组。

尽管您有权读写同步文件夹中的所有文件,但是当PHP检查会话文件所有者的UID时,它与运行PHP的用户不匹配,并且出于安全考虑,它阻止了访问

您可以使用vagrant-bindfs插件解决此问题:

  

vagrant-bindfs

     

一个Vagrant插件,用于在VM中自动执行bindfs挂载。这样,您可以更改文件的所有者,组和权限,例如,解决NFS共享权限问题。

这对我有用:

  • 运行vagrant plugin install vagrant-bindfs
  • 在您的Vagrant文​​件中:

    config.vm.synced_folder '.', '/vagrant', disabled: true
    config.vm.synced_folder '.', '/vagrant-nfs', type: 'nfs'
    
    config.bindfs.bind_folder '/vagrant-nfs', '/vagrant'
    
  • 运行vagrant reload

它有效:

-rw-r--r--  1 vagrant vagrant 5.1K Oct 29 15:45 Vagrantfile

答案 9 :(得分:0)

就我而言,我使用的是sysfony 2,并且删除了缓存后问题就消失了。

rm -rf /app/cache/*

答案 10 :(得分:-4)

您使用了错误的Response名称空间。

您有use Symfony\Component\BrowserKit\Response;,应该是use Symfony\Component\HttpFoundation\Response;