Symfony 3.1.5 警告:SessionHandler::read():会话数据文件不是由您的 uid 创建的
Posted
技术标签:
【中文标题】Symfony 3.1.5 警告:SessionHandler::read():会话数据文件不是由您的 uid 创建的【英文标题】:Symfony 3.1.5 Warning: SessionHandler::read(): Session data file is not created by your uid 【发布时间】:2017-02-20 04:01:20 【问题描述】:我在由 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
中),但错误仍然存在。
我已经搜索了几个主题和问题以寻找解决方案,但没有找到任何解决方案。任何想法是什么原因造成的?
【问题讨论】:
【参考方案1】:就我而言,我使用的是 sysfony 2,在删除缓存后问题就消失了。
rm -rf /app/cache/*
【讨论】:
【参考方案2】:如果您对同步文件夹使用 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,guest上没有对应的用户。 dialout
是来宾上与 staff
组匹配的组,这是我在 Mac 上的主要组。
虽然您有权读取和写入同步文件夹中的所有文件,但当 PHP 检查会话文件所有者的 UID 时,它与运行 PHP 的用户不匹配,并且它会阻止访问作为安全措施.
您可以使用vagrant-bindfs
插件解决此问题:
vagrant-bindfs
一个用于在 VM 中自动挂载 bindfs 的 Vagrant 插件。这允许您更改文件的所有者、组和权限,例如,解决 NFS 共享权限问题。
这对我有用:
运行vagrant plugin install vagrant-bindfs
在你的 Vagrantfile 中:
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
【讨论】:
【参考方案3】:我正在使用基于 symfony 3 的 PIMCORE。 为了解决这个问题,我刚刚清除了浏览器缓存。
我希望这会有所帮助。
【讨论】:
【参考方案4】:就我而言,*删除浏览器 cookie 解决了这个问题。我没有执行上面提到的任何步骤并尝试更改权限,但没有这不是问题。我在 magento 上遇到了问题。
【讨论】:
在 Chrome 隐身模式下工作,因为不保留 cookie【参考方案5】:无法写入会话路径,因为网络用户和会话文件夹中内容的所有者不同,因此不会。
解决方案是将您的 /var 或 /var/sessions/ 所有权设置给网络用户。
chown apache:apache /var/ -R * 要么: chown www-data:www-data /var/ -R *
评分最高的反应并不是最好的反应。
【讨论】:
【参考方案6】:避免因仅在开发环境中出现的问题而更改 prod 配置
将 Vagrant (PHP-FPM 7 + nginx) 与同步文件夹 (/vagrant ~ 默认) 一起使用时遇到同样的问题
解决了就放
session:
save_path: '/tmp'
关于 config_dev.yml 内 framework 条目
只需选择Webserver和PHP可以在没有权限问题的情况下读取/写入的地方。
【讨论】:
就是这样,我们在 Vagrant (PHP 7.1 + nginx 10) 中有相同的设置,这解决了问题。 您不能使用 /tmp 来存储会话,需要更好的安全性,因为任何人都可以访问 /tmp 并且可以删除会话文件。【参考方案7】:如果 Magento 2 生成此警告,
只需删除 var/session
文件夹中已经存在的会话及其固定。
【讨论】:
【参考方案8】:我遇到了类似的问题,清除浏览器的缓存和存储的数据解决了这个问题。
在 chrome 和 opera 上,您应该执行以下操作:
Developer tools > Application > Clear Storage > Clear Site Data
【讨论】:
【参考方案9】:我遇到了同样的问题。对我有用的解决方法是将var/sessions
所有者更改为www-data:www-data
(php-fpm 子进程的用户/组相同):
sudo chown -R www-data:www-data var/sessions/
【讨论】:
就我而言,“不允许操作”。我猜主要是因为与 Vagrant 的同步文件夹。【参考方案10】:编辑 config/config.yml
并将 save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
替换为 save_path: /var/lib/php/sessions
修复了错误。
如果您使用自动将空格转换为制表符的编辑器/IDE,请务必在保存更改之前禁用该功能。不这样做可能会导致发生“不包含有效的 YAML”错误。
【讨论】:
我在我的项目中使用 Vagrant,这就是我今天早上必须做的事情。团队的其他成员正在 MAC 上使用 MAMP,他们不必进行更改。我想知道为什么它可以在开发服务器和现场运行。 我也在使用 Vagrant,我最终关注了这个帖子 ***.com/questions/13169154/…。问题似乎是 synced_folder 设置的权限。无需对 config.yml 进行此更改。希望它可以帮助某人。 另一种可能的解决方案是删除 /var/session/[environment] 中的当前会话文件。根据您设置和运行服务器的方式以及您的 Linux 用户设置,这些文件可能由不同的用户拥有。 我正在使用 Docker,我必须手动创建/var/lib/php
才能完成这项工作,所以我认为 symfony 项目文件夹中的 ./var/session
更可取
有效,但配置不应该转到 config/config_dev.yml 以避免意外接触您的生产环境吗?【参考方案11】:
您使用了错误的响应命名空间。
你有use Symfony\Component\BrowserKit\Response;
,应该是use Symfony\Component\HttpFoundation\Response;
【讨论】:
以上是关于Symfony 3.1.5 警告:SessionHandler::read():会话数据文件不是由您的 uid 创建的的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 pyspark EMR Notebook 上的错误 - AnalysisException:无法实例化 org.apache.hadoop.hive.ql.metadata.SessionH
用户测试中多个客户端的 Symfony 4.4 弃用警告已弃用,但仍存在于文档中
Symfony 警告:DOMElement::setAttribute(): string is not in UTF-8