ошибка при сохранении сессий php в директории проекта

В файле конфигурации моего проекта у меня есть:

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 3.2.2 поверх nginx + php-fpm (7.0).

Почему это происходит? Есть ли какой-либо другой параметр, который я должен использовать, чтобы php мог переопределить эту конфигурацию и записать свои файлы сеансов в другом месте?

По следу я вижу, что:

  • NativeSessionStorage ->start() вызывается и выполняет session_start (который возвращает true)
  • Затем вызывается SessionHandlerProxy ->read($sessionId) и выдает исключение при вызове $this->handler->read($sessionId);.

person yivi    schedule 22.01.2017    source источник
comment
Не могли бы вы дать некоторую информацию о вашей ОС и файловой системе, в которой находится symfony?   -  person Jannes Botis    schedule 28.01.2017
comment
Вы уверены, что установили правильные разрешения, используя руководство по Symfony? (точнее часть с setfacl)   -  person tftd    schedule 28.01.2017


Ответы (3)


Мне удалось воспроизвести ту же самую ошибку, создав файл сеанса, но с выводом «Файл данных сеанса не создан вашим uid.», Но я не уверен, что это ваш случай.

В любом случае, я предполагаю, что вы используете сервер nfs для хранения своего кода, но вы разрабатываете и запускаете nginx локально. Вы выполнили подключение nfs к каталогу сервера, чтобы синхронизировать свой код с сервером (у нас было то же самое на одном из моих предыдущих мест).

Итак, вы монтируете каталог сервера nfs в локальный каталог. Что происходит, так это то, что php создает ваш файл сеанса с пользовательскими www-данными, но этот пользователь имеет другой uid на сервере, чем ваш локальный компьютер. Итак, файл создан, вы видите правильного владельца, но его uid отличается.

Проверять:

ссылка

ссылка

Это мое лучшее предположение. Если это так, дайте мне знать, возможно, я смогу помочь с отображением пользователей nfs. Надеюсь, это поможет.

person Jannes Botis    schedule 28.01.2017

Если вы хотите использовать файлы для сохранения сеансов, лучше всего делать это в каталоге того же владельца, что и веб-файлы, а не в «общей» папке. Это может означать, например, одну директорию, начинающуюся с корневого веб-сайта:

  • / главная / myuser / sessions /
  • / главная / myuser / public_html /

Таким образом, ваши сеансы защищены (недоступны из Интернета), отделены от сеансов других веб-сайтов на том же сервере, и вы уверены, что можете управлять файлами в этом каталоге.

person José Carlos PHP    schedule 27.01.2017

Используйте стандартную папку, например: /var/lib/php/session

Избегайте использования /tmp

person Thomas Tourlourat    schedule 29.12.2017