Ошибки обработки сеанса PHP - PullRequest
22 голосов
/ 24 февраля 2011

У меня есть это в самом верху моего send.php файла:

ob_start();
@session_start();

//some display stuff

$_SESSION['id'] = $id; //$id has a value
header('location: test.php');

И в самом верху моего файла test.php:данные отправляются на test.php, отображается следующее:

Array ( )

Предупреждение: неизвестно: открыто (/ var / lib / php / session / sess_isu2r2bqudeosqvpoo8a67oj02, O_RDWR)Сбой: Разрешение отклонено (13) в Неизвестно в строке 0

Предупреждение: Неизвестно: Не удалось записать данные сеанса (файлы).Пожалуйста, убедитесь, что текущий параметр session.save_path правильный (/ var / lib / php / session) в поле Неизвестно в строке 0

Я пробовал использовать только session_start ();но результаты одинаковы.

Ответы [ 13 ]

31 голосов
/ 24 февраля 2011

Посмотрите на ваше сообщение

Итак, первое что это относится к разрешению

open (/ var / lib / php / session / sess_isu2r2bqudeosqvpoo8a67oj02, O_RDWR) завершился ошибкой: в доступе отказано (13) в неизвестном в строке 0

вы должны проверить разрешение файла изменить режим это /var/lib/php/session/

Вторая вещь это относится к session.save_path

Предупреждение: неизвестно: не удалось записать данные сеанса (файлы). Убедитесь, что текущий параметр session.save_path правильный (/ var / lib / php / session) в поле Неизвестно в строке 0

в php.ini

[Session]
; Handler used to store/retrieve data.
session.save_handler = files

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
; 
; As of PHP 4.0.1, you can define the path as:
; 
;     session.save_path = "N;/path"
; 
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
; 
; NOTE 1: PHP will not create this directory structure automatically.
;         You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
;         use subdirectories for session storage
;
session.save_path = /tmp/    <= HERE YOU HAVE TO MAKE SURE

; Whether to use cookies.
session.use_cookies = 1
15 голосов
/ 24 февраля 2011

вам нужно изменить настройку session.save_path на доступный каталог, /tmp/ например

Как изменить: http://php.net/session_save_path

Находясь на общем хосте, рекомендуетсячтобы задать путь сохранения сеанса внутри своего домашнего каталога, но ниже корневого каталога документа

, также обратите внимание, что

  • с использованием ob_start здесь не нужно,
  • , и я уверен, что выпоставил @ operator случайно и уже навсегда уберет его, не так ли?
8 голосов
/ 14 июня 2012

Это была известная ошибка в версии (ях) PHP. В зависимости от вашей серверной среды, вы можете попробовать установить для папки сессий значение 777:

/var/lib/php/session (ваше местоположение может отличаться)

Я использовал этот обходной путь:

session_save_path('/path/not/accessable_to_world/sessions');
ini_set('session.gc_probability', 1);

Вам нужно будет создать эту папку и сделать ее доступной для записи. Я не слишком много возился с разрешениями, но у меня работало 777 (очевидно).

Убедитесь, что место, где вы храните свои сессии, недоступно для мира.

Это решение может работать не для всех, но я надеюсь, что оно поможет некоторым людям!

4 голосов
/ 04 октября 2012

Перейдите к вашему PHP.ini файлу или найдите PHP.ini EZConfig на вашем Cpanel и установите для session.save_path полный путь, ведущий к файлу tmp, то есть: /home/cpanelusername/tmp

2 голосов
/ 07 мая 2018

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

  1. Убедитесь, что папка существует с sudo cd /var/lib/php/session.Если он не существует, sudo mkdir /var/lib/php/session или дважды проверьте журналы, чтобы убедиться, что вы указали правильный путь.
  2. Дайте папке полные права доступа с помощью sudo chmod 777 /var/lib/php/session.

Перезапуститесценарий, и он должен работать нормально, однако, не рекомендуется оставлять папку с полными разрешениями.В целях безопасности файлы и папки должны иметь только минимальные необходимые разрешения.Следующие шаги исправят это:

  1. Вы уже должны быть в папке сеанса, поэтому просто запустите sudo ls -l, чтобы узнать владельца файла сеанса.
  2. Установите правильного владельцапапки сеанса с sudo chown user /var/lib/php/session.
  3. Дайте только владельцу права на полное чтение, запись и выполнение с sudo chmod 700 /var/lib/php/session.

NB

Возможно, вам не нужно использовать команду sudo.

1 голос
/ 10 июня 2015

У меня была такая же ошибка, все было правильно, как установка прав доступа к папке.

В моем случае это выглядит как ошибка в php, потому что когда я удалял свой файл cookie PHPSESSID, он снова работал, поэтому что-то не так запуталось, и сессия была удалена, но файл cookie все еще был активным, поэтому php пришлось определить причину по-другому сначала проверяя, является ли файл сеанса все еще они, и выдают другую ошибку, а не ошибку разрешения

1 голос
/ 24 февраля 2011

, пожалуйста, убедитесь, что session.save_path правильно установлен в php.ini. php требуется доступ на чтение / запись к каталогу, в котором установлена ​​эта переменная.

больше информации: http://www.php.net/manual/en/session.configuration.php#ini.session.save-path

0 голосов
/ 27 сентября 2017

При использовании последней версии WHM (v66.0.23) вы можете перейти в MultiPHP INI Editor, выбрать версию PHP и установить для session.save_path значение по умолчанию, т.е. / var / cpanel / php / session / ea-php70 вместо предыдущего простого tmp - это помогломне избавиться от таких ошибок.

0 голосов
/ 08 января 2016

Если вы используете сконфигурированный vhost и обнаруживаете ту же ошибку, то вы можете переопределить настройку по умолчанию php_value session.save_path в вашем <VirtualHost *:80>

#
# Apache specific PHP configuration options
# those can be override in each configured vhost
#
php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/5.6/session"
php_value soap.wsdl_cache_dir  "/var/lib/php/5.6/wsdlcache"

Изменить путь на свой '/tmp' с помощью chmod777.

0 голосов
/ 10 декабря 2015

Я использую php-5.4.45 и у меня та же проблема.

Если вы являетесь пользователем php-fpm, попробуйте отредактировать php-fpm.conf и измените listen.owner и listen.groupна правильный.Мой пользователь nginx - apache, поэтому здесь я изменяю их на params на apache, тогда он хорошо работает для меня.

Для пользователя apache, я думаю, вы должны отредактировать свои параметры fast-cgi, ссылаясь на два параметра, которые я упомянул выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...