Рейтинг:0

Macos, меняющий пользователя в Apache, нарушает постоянство PHP SESSION

флаг dz

Я использую встроенный в Macos сервер Apache локально для разработки. Я разработал сайт, который использует PHP и использует сеансовые файлы cookie для сохранения сеансов. При настройке Apache по умолчанию все работало нормально, и данные сеанса сохранялись правильно.

Для простоты разработки я хотел изменить пользователя и группу в Apache на свое имя пользователя и группу. Я сделал это, отредактировав файл /etc/apache2/httpd.conf в соответствии с инструкциями, которые нашел в сети. Перезапустил Apache, и все работает нормально - <?php print `whoami` ?> показывает ожидаемое имя пользователя (мое.)

ОДНАКО, теперь я начал замечать, что переменная $_SESSION больше не сохраняется.

Я проверил /etc/php.ini, чтобы увидеть, есть ли строка, которая включала «_www» (пользователь и группа Apache по умолчанию), думая, что конфигурация PHP также должна быть изменена для синхронизации. Однако grep не вернул строк как таковых.

Кто-нибудь знает, что здесь происходит, и как это исправить?

РЕДАКТИРОВАТЬ: я проверил идентификаторы сеансов идентификатор сессии() и проверил, что одни и те же идентификаторы сеанса используются между страницами.

Chris avatar
флаг it
Может быть проблема с правами доступа к каталогу сеанса. Вы что-то видите в логах? Вы можете попробовать установить другой каталог (`session.save_path` в php.ini)
флаг dz
На самом деле исправить оказалось проще. Все, что мне нужно было сделать, это очистить куки в моем браузере :-) Ваш намек на проблему с разрешениями дал мне ключ к разгадке. Спасибо.
Рейтинг:0
флаг dz

PHP сохраняет файл сеанса в /var/tmp, например. sess_1aas3b0jgjbbsoktg3fcehu5je. Сессионные файлы здесь имеют 600 разрешений, поэтому ТОЛЬКО владелец может их читать или писать. Браузер сохраняет файл cookie сеанса с тем же идентификатором. Перед изменением пользователя и группы в конфигурации Apache идентификатор сеанса был записан как _www в качестве владельца. После изменения пользователя и группы в конфигурации Apache, если файл cookie сеанса все еще жив в браузере, он сообщит PHP о доступе к этому идентификатору, только теперь пользователь xyz, и он не может читать или записывать этот файл.

Простое решение состоит в том, чтобы очистить файл cookie сеанса в браузере (или дождаться его истечения). Теперь PHP создаст новый файл сеанса с новым владельцем xyz.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.