Как заставить мою сессию писать в apache

Недавно я сменил сервер, и теперь моя домашняя страница не работает. Он дает следующий текст:

Warning: session_start() [function.session-start]: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in /var/www/vhosts/alt.alternativedc.com/httpdocs/index.php on line 6

Warning: Unknown: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0

Я предположил, что это означает, что папка сеанса недоступна для записи, поэтому я выполнил следующую команду после того, как подключился к серверу по ssh:

chmod o+rw /var/lib/php/session

Это, похоже, не решило проблему. Не знаю, что теперь делать...


person Daniel Kats    schedule 08.07.2011    source источник
comment
Существует ли этот конкретный файл сеанса? Возможно, вам также придется изменить все файлы сеанса.   -  person Marc B    schedule 08.07.2011
comment
вроде не решил проблему. Что это обозначает?   -  person webbiedave    schedule 08.07.2011
comment
@webbiedave Означает, что ничего не изменилось - ошибки остались. @Marc B не уверен, что смогу это сделать. Я думаю, что PHP создает новый файл для каждого идентификатора сеанса. Я не могу предвидеть идентификаторы сеансов. хотя не уверен, что прав...   -  person Daniel Kats    schedule 08.07.2011
comment
@BlackSheep: Марк Б. просто хочет также запустить chmod o+rw /var/lib/php/session/*, а затем повторить попытку.   -  person webbiedave    schedule 08.07.2011
comment
@webbiedave Запустил chmod o+rw /var/lib/php/session/*, получил chmod: невозможно получить доступ к `/var/lib/php/session/*': такого файла или каталога нет   -  person Daniel Kats    schedule 08.07.2011


Ответы (7)


Попробуйте изменить путь сохранения сеанса в файле конфигурации php, /tmp — хорошее место.

php.ini

session.save_path = /tmp

http://www.php.net/manual/en/session.configuration.php#ini.session.save-path

person Eddie    schedule 08.07.2011
comment
Отлично работает на OSX 10.10 - person smerten; 28.09.2015
comment
Предупреждение: Если вы оставите это значение общедоступным для чтения каталогом, таким как /tmp (по умолчанию), другие пользователи на сервере смогут перехватывать сеансы, получая список файлов в этом каталоге. - person jgraup; 02.02.2016
comment
В моем случае мне просто нужно было удалить 3; по умолчанию session.save_path = 3;/var/lib/php/sessions - person John Doe; 01.03.2018

Просто была такая же проблема в CentOS:

chown -R apache:apache /var/lib/php/session

Также должно работать назначение пользователя httpd владельцем каталога сеанса.

person Martin Zeitler    schedule 21.12.2013
comment
Это верный точный ответ на проблему с /var/lib/php/session/ - person Kyobul; 04.12.2014

Вероятно, вы рекурсивно изменили разрешения родительской папки, скорее всего, для своего пользователя.
Перейдите в папку сеансов:
cd ~;cd /var/lib/php/

Если вы найдете папку сеансов, просто введите эти две команды в свой терминал:
cd ~; чтобы вернуться домой, затем
sudo chown -R www-data:www-data /var/lib/php/session

Или, если папка сеансов называется "сеансы" вместо "сеанс":
cd ~; вернуться домой, то
sudo chown -R www-data:www-data /var/lib/php/sessions

Таким образом, ваш сервер сможет записывать сеансы в ваш проект.
Я совершенно уверен в этом подходе.

person daniel Warui    schedule 27.06.2016

оба tmp и /var/lib/session должны быть chmod 1777

и проблема решена.

person Muharrem    schedule 24.04.2013
comment
Добро пожаловать в Stack Overflow. Когда вы отвечаете на вопрос, пожалуйста, оформляйте свой ответ красиво (орфография, грамматика, пунктуация). В этом случае также объясните, что делает chmod 1777, и, что еще лучше, объясните это в более общих терминах, например, убедитесь, что /tmp и /var/lib/session доступны для записи. - person Martijn de Milliano; 25.04.2013
comment
Разрешения 1777 могут быть рискованными. unix.stackexchange.com/questions/64126/ - person Keith John Hutchison; 04.09.2018

Попробуйте изменить владельца каталога сеанса на www-data. Для этого запустите эту команду sudo chown -R www-data /var/lib/php/sessions. Это работает для меня.

person Akshay jumbade    schedule 16.08.2018
comment
измените www-данные с вашим пользователем: группа, и это работает! - person George Tiganila; 01.02.2021

Я пробовал все решения здесь, но они не работали, потому что php.ini перезаписывался другими конфигами.

Чтобы найти виновника, я использовал этот трюк:

grep -lR 'php_value' /etc/

И вот это /etc/httpd/conf.d/php.conf все испортилось. Поэтому я изменил его значение с php_value session.save_path "/var/lib/php/session" на php_value session.save_path "/tmp".

После перезапуска Apache (service httpd restart) он наконец заработал!

person carla    schedule 26.02.2016

в Ubuntu 12.04 /var/lib/php5 имеет разрешение 1733. Я меняю в php.ini session.save_path на /tmp, чтобы правильно хранить сеансы. В качестве альтернативы вы можете установить параметр в своем коде с помощью ini_set('session.save_path',path_where_apache_have_permission_777);

person Giacomo    schedule 24.04.2014