Symfony 4框架会话处理程序错误

时间:2019-05-31 01:48:19

标签: warnings symfony4

我正在使用symfony 4,错误代表什么?

警告:SessionHandler :: read():打开(/ var / lib / php / sessions / sess_634q91mh896b6aa4jpjvlihmar,O_RDWR)失败:权限被拒绝(13)

2 个答案:

答案 0 :(得分:0)

与symfony 4无关,但是您必须在/ var / lib / php / sessions /目录中修复权限

答案 1 :(得分:0)

当用户登录Symfony应用程序时,会话信息存储在Web服务器上。默认情况下,Symfony使用本地PHP会话机制,将会话信息存储在Linux系统上的/ var / lib / php / sessions /中的文件中。您的错误消息是PHP输出的,表示它在创建或重新打开会话文件时出现权限错误。

该错误仅间歇性出现,因为PHP大约每每加载1/100或1/1000页面就会随机删除旧的会话文件。 (在某些Linux变体中,旧的会话文件将由cron作业删除。)

https://symfony.com/doc/current/session.html说: “如果写入同一目录的其他应用程序的最大生存期设置很短,则某些与会话到期相关的选项可能无法按预期工作。”

尽量避免让多个进程写入同一会话目录。我想我收到了错误消息,因为Apache Web服务器和php bin/console server:start都在同时运行。一个进程可能已删除另一个进程的会话文件。

有关如何配置写入单独目录的信息,请参见PHP manualSymfony manual。例如,我更改了{Symfony directory}/config/packages/framework.yaml

# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
session:
    # handler_id: ~
    cookie_secure: auto
    cookie_samesite: lax
    handler_id: 'session.handler.native_file'
    save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
    gc_probability: 100  # Run garbage collection always for 
    gc_divisor: 100      # investigating this problem only.

另一种可能是您的Symfony代码中的问题可能导致错误消息。 Symfony文档说不要直接调用session_start()之类的PHP会话函数,因为Symfony类会调用它们。我的代码中的错误导致了一个异常,我推测是导致了错误消息。

相关的堆栈溢出问题:cleanup-php-session-fileshow-does-php-know-when-to-delete-a-session

对于那些熟悉C代码的人,请参阅显示错误here的PHP解释器源代码行

希望这会有所帮助!