2017-01-09 7 views
3

Разделите проблему, которую я (и теперь решил).Не удалось прочитать данные сеанса на PHP7.1

На моей машине разработки я запускаю IIS с PHP. Я повышен до PHP7 и вдруг мой код больше не работал, возвращая эту ошибку ...

session_start(): Не удалось прочитать данные сеанса: пользователь (путь: C: \ WINDOWS \ Temp)

Это похоже на проблему с разрешениями, не так ли? Итак, я долгое время настраивал настройки php.ini и пытался изменить права доступа к папкам - без успеха.

Тогда я кое-что понял. См. Мой ответ ниже.

ответ

25

Я наконец понял, что сообщение было бессмысленным - приложение реализует собственный обработчик сеанса, используя базу данных. В методе читайте, я получаю данные сеанса как строку из базы данных.

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 только мой собственный данные класс утилиты)

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

+2

Даже думал, что он возвращает строку в руководстве (http://php.net/manual/en/sessionhandlerinterface.read.php), я также возвращал нулевое значение, вы спасли меня много времени :) – NiGhTHawK

+0

Это сработало отлично. – geilt

+1

Стоит отметить, что это также проблема, когда возвращается логическое значение (false) – pfwd

 Смежные вопросы

  • Нет связанных вопросов^_^