Разделите проблему, которую я (и теперь решил).
На моей машине разработки я запускаю IIS с PHP. Я обновился до PHP7, и вдруг мой код больше не работал, возвращая эту ошибку …
session_start (): Не удалось прочитать данные сеанса: user (путь: C: \ WINDOWS \ temp)
Это похоже на проблему с разрешениями, не так ли? Итак, я долгое время настраивал настройки php.ini и пытался изменить права доступа к папкам – без успеха.
Тогда я кое-что понял. См. Мой ответ ниже.
Я наконец понял, что сообщение было бессмысленным – приложение реализует собственный обработчик сеанса, используя базу данных. В методе чтения я получаю данные сеанса как строку из базы данных.
class Sess implements SessionHandlerInterface ... public function read($key) { $qKey = U_Data::quote($key); $dt = U_Data::datetime(); $sql = <<<EOT SELECT `sess_data` FROM `sess` WHERE `sess_key` = $qKey AND `sess_exp_ts` > $dt ORDER BY `sess_exp_ts` DESC LIMIT 1 EOT; return U_Data::getOneVal($sql); }
Метод U_Data :: getOneVal имеет второй параметр для возврата, если нет соответствующих данных. Значение по умолчанию – null, и это отлично работает в PHP5, но в PHP7.1 оно вызывает ошибку. Простое изменение, чтобы вернуть пустую строку, вместо этого решило проблему.
return U_Data::getOneVal($sql, '');
Так оно и есть. Если вы получаете предупреждение о том, что session_start не работает И вы реализуете свой собственный обработчик сеанса, попробуйте проверить свой код в методе чтения, чтобы он всегда возвращал строку .
(Примечание: U_Data – это только мой собственный служебный класс данных)
Надеюсь, это спасет кого-то еще в те часы, которые я потратил на мой мозг!