在项目的目录保存PHP的会话时出错(error when saving php sessions i

2019-09-28 12:47发布

在我的项目的配置文件,我有:

session:
        handler_id:  session.handler.native_file
        save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"

"%kernel.root_dir%/../var/sessions属于wwww-data (是的,PHP-FPM作为运行www-data )。

当项目运行时,在该目录中创建一个( )的会话文件,但显然PHP / symfony中有实际困难读/写它,尽管能够正确地创建它。 下面是空的会议文件,刚刚创建(没有其他进程此请求后,跑了):

请求去世引发异常:

不是由你的uid会话创建数据文件。

我发现这个答案 (和这一个),并通过这样做,(设置我的会话的save_path"/var/lib/php/sessions"我能继续(我可以看到我的会议文件会不仅创造,但其内容实际上已经到位),但我想明白为什么它未能在会议文件保存在自定义位置。

在我的PHP配置我看到我session.save_path设置/var/lib/php/session ,但是我希望我能够重写的执行时间。

真正怨恨我是会话文件获得创建(所以文件的权限应该是罚款),但不能写入。

我跑的Symfony上的nginx + PHP-FPM(7.0)的顶部3.2.2。

这究竟是为什么? 有没有我应该使用这样的PHP能够覆盖这个配置,写它的会话任何其他设置文件在其他地方?

从跟踪我看到:

  • NativeSessionStorage ->start()被调用,并执行session_start (返回true)
  • 然后SessionHandlerProxy ->read($sessionId)被调用,调用时抛出异常$this->handler->read($sessionId);

Answer 1:

我能够重现完全相同的错误,创建会话文件,但抛出“不是你的uid会话创建数据文件。”,但我不知道这是你的情况。

不管怎样,我的猜测是,您使用的是NFS服务器,让您的代码,但是您开发和Nginx的本地运行。 你犯了一个NFS挂载到服务器上的目录同步代码到服务器(我们在我以前就业的一个相同)。

所以你安装的NFS服务器目录到本地目录。 什么情况是,PHP创建了用户WWW的数据会话文件,但该用户具有服务器比你的本地计算机上的不同的UID。 因此,在创建文件时,你看到的拥有者,但它的UID是不同的。

校验:

链接

链接

这仅仅是我最好的猜测。 如果是这样的话,让我知道,也许我可以用NFS用户映射帮助。 希望能帮助到你。



Answer 2:

如果你想用文件来保存会话,最好的做法是做它从同一个所有者目录为网页文件,而不是在一个“共同”的文件夹。 这可以指,例如,一个目录向上起始于web根:

  • /家/ myuser的/会话/
  • /家/ myuser的/的public_html /

这样,你的会话固定(不可访问从网页),从其他网的会议分开在同一台服务器,并且你确信你可以在目录管理文件。



Answer 3:

使用标准的文件夹,即: /var/lib/php/session

避免使用/tmp



文章来源: error when saving php sessions in project's directory