Ошибки обработки PHP-сессии

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

 ob_start(); @session_start(); //some display stuff $_SESSION['id'] = $id; //$id has a value header('location: test.php'); 

И следующее в самом верху моего файла test.php:

 ob_start(); @session_start(); error_reporting(E_ALL); ini_set('display_errors', '1'); print_r($_SESSION); 

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

Array ( )

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

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

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

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

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

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

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

Во-вторых, это связано с session.save_path

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

в 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 

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

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

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

также отметим, что

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

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

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

Я закончил использование этого обходного пути:

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

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

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

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

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

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

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

У меня была аналогичная проблема с PHP7 + Symfony 3.1.0 + Vagrant и она была решена. Надеюсь, это поможет кому-то:

PHP7 + Symfony 3.1.0 + Vagrant: не удалось записать данные сеанса

При использовании функции заголовка php не запускает закрытие текущего сеанса. Вы должны использовать session_write_close для закрытия сеанса и удаления блокировки файла из файла сеанса.

 ob_start(); @session_start(); //some display stuff $_SESSION['id'] = $id; //$id has a value session_write_close(); header('location: test.php'); 

проверьте ваше пространство cpanels.remove неиспользуемый файл или файл error.log, а затем попробуйте войти в свое приложение (эта работа для меня);

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

 Warning: session_start(): open(/var/folders/zw/hdfw48qd25xcch5sz9dd3w600000gn/T/sess_f8bgs41qn3fk6d95s0pfps60n4, O_RDWR) failed: Permission denied (13) in /Applications/XAMPP/xamppfiles/htdocs/foo/bar.php on line 3 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Applications/XAMPP/xamppfiles/htdocs/foo/bar.php:3) in /Applications/XAMPP/xamppfiles/htdocs/foo/bar.php on line 3 Warning: Unknown: open(/var/lib/php/session/sess_isu2r2bqudeosqvpoo8a67oj02, 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 

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

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

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

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

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

Если вы используете сконфигурированный 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' с помощью chmod 777.

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