Как устранить неполадки, связанные с сохранением сеанса, на моем Media Temple CentOS VPS?

Мой веб-сайт не будет сохранять сессии PHP должным образом, я изначально публиковал его в SO, но он все больше напоминает проблему с сервером. Итак, я решил перефразировать вопрос здесь.

Почему эта конфигурация сервера PHP не может сохранять и получать сеансы?

Кажется, что одним из ключевых симптомов является то, что PHP не создает никаких файлов в /var/lib/php/session, Вот текущие разрешения от сервера:

$ ls -al /var/lib/php/session/
total 28
drwxrwx--- 2 root apache 24576 Jul 20 13:30 .
drwxr-xr-x 3 root root    4096 Jul 20 13:30 ..

Вот несколько тестовых URL. Эта первая ссылка создает массив сеанса и печатает выходные данные, вторая просто печатает выходные данные сеанса, но, к сожалению, она пуста.

http://barbadospropertylist.com/wp-content/plugins/gravitymeta/test.php?name=value

http://barbadospropertylist.com/wp-content/plugins/gravitymeta/test.php

1 ответ

Я вижу, что вы используете nginx и порт 7080 для Apache.

Если когда-либо ваша архитектура включает в себя несколько серверов Apache и некоторую балансировку нагрузки, то вы должны что-то сделать, чтобы сеансы были распределены между несколькими серверами Apache (memcached, умная балансировка нагрузки, nfs, mysql, ...).

Редактировать #1

ИМХО, поскольку у вас есть только один веб-сервер, сейчас нет причин пытаться использовать memcached для хранения сессий.

В какой-то момент вам удалось настроить php для использования файлов для хранения сессий, но файлы сессий не были эффективно записаны / var / lib / php / session

Вот почему вы теряете сессию, когда переходите с одной страницы на другую.

Разрешения / var / lib / php / session обычно хороши, и сессии работают в большинстве дистрибутивов Linux и BSD.

Чтобы проверить правильность разрешений, сделайте следующее:

Шаг 1: Убедитесь, что php настроен на запись в / var / lib / php / session, используя ваш URL, который вызывает phpinfo(). Вы должны получить что-то вроде:

Registered save handlers => files user
session.save_path => /var/lib/php/session

Шаг 2: Проверьте, под каким пользователем apache работает как с ps, так и просматривая файлы конфигурации.

Вы должны получить apache, www, www-data или http.

шаг 3:

Убедитесь, что у пользователя apache есть доступ на запись к пути сеанса. Это можно сделать, набрав ls -ld / var; ls -ld / var / lib; ls -ld / var / php; ls -ld var / lib / php / session

или путем эффективного создания файла с пользователем Apache

su - www -s / bin / bash или su -m www

затем

touch / var / lib / php / session / test

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

Другие вопросы по тегам