Как устранить неполадки, связанные с сохранением сеанса, на моем 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
Если разрешение не проблема, мы можем попробовать другие вещи