Ошибка обработчика сеанса платформы Symfony 4 - PullRequest
0 голосов
/ 31 мая 2019

Я использую Symfony 4, что означает ошибка?

Предупреждение: SessionHandler :: read (): открыть (/ var / lib / php / session / sess_634q91mh896b6aa4jpjvlihmar, O_RDWR) не удалось: разрешение отклонено (13)

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Когда пользователь входит в приложение Symfony, информация о сеансе сохраняется на веб-сервере.По умолчанию Symfony использует собственный механизм сессий PHP, хранящий информацию о сессиях в файле в / var / lib / php / session / в системах Linux.Ваше сообщение об ошибке выводится PHP и означает, что он получил ошибку разрешений при создании или повторном открытии файла сеанса.

Ошибка появляется только периодически, поскольку PHP удаляет старые файлы сеанса случайным образом примерно каждые 1/100 или 1/1000загрузка страницы.(В некоторых вариантах Linux вместо старых файлов сеанса вместо этого используется задание cron.)

https://symfony.com/doc/current/session.html говорит: «некоторые параметры, связанные с истечением срока действия сеанса, могут работать не так, как ожидается, если другие приложения, которые пишут вдля одного и того же каталога заданы короткие настройки максимального времени жизни. "

Старайтесь избегать записи нескольких процессов в один каталог сеансов.Я думаю, что получил сообщение об ошибке, потому что веб-сервер Apache и php bin/console server:start работали одновременно.Один процесс мог удалить файл сеанса другого процесса.

См. Руководство по PHP и Руководство по Symfony , чтобы узнать, как настроить запись в отдельные каталоги.Например, я изменил {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 говорится, что нельзя вызывать функции сеанса PHP, такие как session_start() напрямую, так как классы Symfony вызывают их.Ошибка в моем коде вызвала исключение, которое, как я предполагаю, вызвало сообщение об ошибке.

Вопросы, связанные с переполнением стека: cleanup-php-session-files и how-do-php-знать, когда нужно удалить сеанс

Для тех, кто знаком с кодом C, см. строку исходного кода интерпретатора PHP, которая печатает ошибку здесь

Надеюсь, это поможет!

0 голосов
/ 31 мая 2019

Не относится к Symfony 4, но вы должны исправить разрешения в вашем / var / lib / php / session / каталоге

...