28
votes

I'm running Symfony 3.1.5 on a Ubuntu 14.04, PHP 7.1 and Apache 2.4.23 stack managed by Vagrant 1.8.6/VirtualBox 5.1.6. I'm trying to use a simple controller I've made to render a response on my frontend:

<?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!');
    }
}

When I attempt to access my Symfony frontend via /app_dev.php I see:

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

My Apache log reads:

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

The Symfony dev log reads:

==> /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)"} []

Seeing as this appears to be a session related issue, I've referred to the Symfony documentation for Session Management. It states:

Symfony sessions are incompatible with php.ini directive session.auto_start = 1 This directive should be turned off in php.ini, in the webserver directives or in .htaccess.

session.auto_start = 0 in my php.ini and the file is owned by user and group 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

I've tried creating an .htaccess (which I placed in my DocumentRoot) per the instructions in the Symfony documentation, but the error persists.

I've searched several threads and questions for a solution but have not landed on anything. Any ideas what is causing this?

11

11 Answers

52
votes

Editing config/config.yml and replacing save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" with save_path: /var/lib/php/sessions fixed the error.

If you use an editor/IDE that automatically converts spaces to tabs, be sure to disable that feature before saving your changes. Failure to do so may cause a 'does not contain valid YAML' error to occur.

18
votes

I had the same problem. The fix that worked for me is to change var/sessions owner to www-data:www-data (same user/group for php-fpm sub-processes) :

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

AVOID change prod configuration for troubles that only occurs in development environment

Had the Same trouble when using Vagrant (PHP-FPM 7 + Nginx) with a sync folder (/vagrant ~ default)

Solved just put

    session:
        save_path: '/tmp'

on config_dev.yml inside framework entry

Just choose some place that Webserver and PHP can read/write without permission issues.

9
votes

If Magento 2 generates this warning,

Just delete already existed session inside var/session folder and its fixed.

5
votes

I had a similar problem and clearing my browser's cache and stored data solved the problem.

On chrome and opera you should the following:

Developer tools > Application > Clear Storage > Clear Site Data
4
votes

In my case, *removing browser cookies fixed the issue. I didn't do any of the step mentioned above and tried to change permissions and all but no that wasn't the problem. I've faced problem on magento.

2
votes

Session path can't be written to since the web user and the owner of the content in the sessions folder are different and thus doesn't .

Solution is to set your /var or /var/sessions/ ownership to the web user.

chown apache:apache /var/ -R * Or: chown www-data:www-data /var/ -R *

Highest rated response is not really the best response here.

2
votes

If you are using NFS for the synced folder, then the UID and GID of all files in it will be the UID and GID of the host user running Vagrant, and might not match the UID and GID of the vagrant user on the guest. For example, I have:

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

501 is the UID of my user on the Mac, and there is no corresponding user on the guest. dialout is the group on the guest that matches the staff group that’s my primary group on the Mac.

Although you have permissions to read and write all files in the synced folder, when PHP checks the UID of the session file owner, it doesn’t match the user PHP is running as, and it blocks the access as a security measure.

You can use the vagrant-bindfs plugin to work around this:

vagrant-bindfs

A Vagrant plugin to automate bindfs mount in the VM. This allow you to change owner, group and permissions on files and, for example, work around NFS share permissions issues.

Here’s what worked for me:

  • Run vagrant plugin install vagrant-bindfs
  • In your Vagrantfile:

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

And it works:

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

I am using PIMCORE which is based on symfony 3. To fix this issue,I just cleared browser cache.

I hope this will help.

0
votes

In my case, i was using sysfony 2 and after removing the cache the problem was gone.

rm -rf /app/cache/*
-4
votes

You are using wrong Response namespace.

You have use Symfony\Component\BrowserKit\Response; and should be use Symfony\Component\HttpFoundation\Response;