web-dev-qa-db-fra.com

Avertissement Symfony 3.1.5: SessionHandler :: read (): Le fichier de données de session n’est pas créé par votre uid

J'utilise Symfony 3.1.5 sur une pile Ubuntu 14.04, PHP 7.1 et Apache 2.4.23 gérée par Vagrant 1.8.6/VirtualBox 5.1.6. J'essaie d'utiliser un contrôleur simple que j'ai créé pour afficher une réponse sur mon interface client:

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

Lorsque je tente d'accéder à mon interface Symfony via /app_dev.php, je vois:

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

Mon journal Apache se lit comme suit:

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

Le journal de développement Symfony se lit comme suit:

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

Considérant qu'il semble s'agir d'un problème lié à la session, j'ai consulté la documentation de Symfony pour Session Management . Il est dit:

Les sessions Symfony sont incompatibles avec la directive php.ini session.auto_start = 1 Cette directive doit être désactivée dans php.ini, dans les directives du serveur Web ou dans le fichier .htaccess.

session.auto_start = 0 dans mon php.ini et le fichier appartient à l'utilisateur et au groupe 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

J'ai essayé de créer un .htaccess (que j'ai placé dans ma DocumentRoot) conformément aux instructions de la documentation de Symfony, mais l'erreur persiste.

J'ai cherché plusieurs solutions et questions pour trouver une solution, mais je n'ai rien trouvé. Des idées ce qui cause ceci?

25
marcusnjones

Éditer config/config.yml et remplacer save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" par save_path: /var/lib/php/sessions a corrigé l'erreur.

Si vous utilisez un éditeur/IDE qui convertit automatiquement les espaces en onglets, veillez à désactiver cette fonctionnalité avant d'enregistrer vos modifications. Sinon, une erreur 'ne contenant pas de YAML valide' peut se produire. 

49
marcusnjones

J'ai eu le même problème. La solution qui a fonctionné pour moi est de changer var/sessions propriétaire en www-data:www-data (même utilisateur/groupe pour les sous-processus php-fpm):

Sudo chown -R www-data:www-data var/sessions/
16
Takman

AVOID changer la configuration de produit pour les problèmes qui ne se produisent que dans l'environnement de développement  

Avait le même problème lorsque vous utilisez Vagrant (PHP-FPM 7 + Nginx) avec un dossier de synchronisation (/ vagrant ~ default)

Résolu vient de mettre 

    session:
        save_path: '/tmp'

surconfig_dev.ymlinsideframeworkentry

Il suffit de choisir un emplacement où Webserver et PHP peuvent lire/écrire sans problèmes de permission.

15
Marcos Regis

Si Magento 2 génère cet avertissement,

Juste supprimer session déjà existante dans le dossier var/session et son corrigé .

7
Vinith

J'ai eu un problème similaire et effacer le cache de mon navigateur et les données stockées a résolu le problème. 

Sur chrome et opéra, vous devriez ce qui suit:

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

Dans mon cas, * la suppression des cookies du navigateur a résolu le problème . Je n'ai fait aucune des étapes mentionnées ci-dessus et j'ai essayé de modifier les autorisations et tout ce qui n'était pas non, ce n'était pas le problème. J'ai rencontré un problème sur magento.

3

J'utilise PIMCORE, basé sur Symfony 3. Pour résoudre ce problème, je viens de vider le cache du navigateur.

J'espère que cela aidera.

0
Faiyaz Alam

Le chemin de session ne peut pas être écrit car l'utilisateur Web et le propriétaire du contenu du dossier de sessions sont différents et ne le sont donc pas.

La solution consiste à définir votre/var ou/var/sessions/property sur l'utilisateur Web.

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

La réponse la mieux notée n'est pas vraiment la meilleure réponse ici.

0
D Hersch

Si vous utilisez NFS pour le dossier synchronisé, l'UID et le GID de tous les fichiers qu'il contient seront les UID et GID de l'utilisateur Host exécutant Vagrant et pourraient ne pas correspondre à l'UID et au GID de l'utilisateur vagrant sur l'invité. Par exemple, j'ai:

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

501 est l'UID de mon utilisateur sur le Mac et il n'y a pas d'utilisateur correspondant sur l'invité. dialout est le groupe sur l'invité qui correspond au groupe staff qui est mon groupe principal sur Mac.

Bien que vous disposiez des autorisations pour lire et écrire tous les fichiers du dossier synchronisé, lorsque PHP vérifie l'UID du propriétaire du fichier de session, il ne correspond pas à l'utilisateur PHP en cours d'exécution en tant que, et il bloque le accès comme mesure de sécurité.

Vous pouvez utiliser le plugin vagrant-bindfs pour contourner ce problème:

vagrant-bindfs

Un plugin Vagrant pour automatiser le montage de bindfs dans la VM. Cela vous permet de modifier le propriétaire, le groupe et les autorisations sur les fichiers et, par exemple, de contourner les problèmes d'autorisations de partage NFS.

Voici ce qui a fonctionné pour moi:

  • Exécuter vagrant plugin install vagrant-bindfs
  • Dans votre Vagrantfile:

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

Et il fonctionne:

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