Игнорируется PHP-сессия.save_path

#php #apache #session

#php #apache #сессия

Вопрос:

У меня были проблемы с тем, что мой веб-сайт PHP (SuiteCRM) не мог регистрировать пользователей, и я обнаружил, что это связано с невозможностью записи в каталог сеансов.

Я могу это исправить, создав каталог /tmp/php_sessions и предоставив ему права на запись для пользователя Apache www-data . Я вижу, что каталог заполняется файлами при входе пользователей в систему.

Однако Ubuntu Ubuntu удаляет весь мой tmp каталог при перезагрузке, поэтому мне приходится каждый раз переделывать это заново. Я решил переместить свой save_path в другое место.

После изменения параметров в моем файле php.ini и перезапуска Apache я могу проверить, что они эффективны, запустив этот простой скрипт:

 <?php
   echo ini_get("session.save_path");

   phpinfo();
?>
  

Это показывает мне двойное подтверждение нового пути, сначала повторяющееся /var/tmp/php_sessions , а затем, в середине всей информации phpinfo, показывающее то же значение, что и для обоих Local Value и Master value для директивы session.save_path .

НО каталог, который использует php, по-прежнему является первым, /tmp/php_sessions ! Кажется, что моя настройка игнорируется.

Я что-то упускаю из виду? Где может быть похоронен этот старый параметр? Или как я могу сделать новый эффективным?

(PS — я не использую redis обработчик, как в другом подобном вопросе SO)

Комментарии:

1. У вас есть разрешение на редактирование вашего php.ini файла?

2. Вы вручную задавали путь к сеансу

3. Попробуйте добавить путь к сеансу вручную, используя этот код ini_set(session.save_path, '/path/to/your/folder') , поместите этот код после <?php , после этого вы начнете сеанс с помощью session_start()

4. @Vigneschinnaiyan Я попробовал, и это не сработало, те же результаты. Однако ваш комментарий направил меня на правильный путь, и я смог решить проблему. Я отправлю его в качестве ответа через несколько минут. Большое спасибо!

Ответ №1:

Хорошо, я решил свою собственную проблему, и общий ответ заключается в следующем:

Есть еще две вещи, которые могут изменять путь и должны быть проверены,

  1. возможно, PHP-код приложения изменяет ini директиву, выполните поиск в коде ini_set(session.save_path

  2. возможно, PHP-код использует команду session_save_path PHP для переопределения ini . Также выполните поиск в коде (и обратите внимание на два подчеркивания _ !)

И конкретный ответ для моего случая заключался в том, что SuiteCRM использует session_save_path command для задания своего пути со значением, полученным из файла config.php , найденного в корне веб-страницы. Вот где я нашел старую настройку, и ее изменение решило мою проблему (надеюсь, навсегда).