Я наконец понял, что сообщение было бессмысленным - приложение реализует собственный обработчик сеанса, используя базу данных. В методе читайте, я получаю данные сеанса как строку из базы данных.
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 только мой собственный данные класс утилиты)
Я надеюсь, что это спасает кого-то в другом месте часов, которые я провел стеллажи моего мозга!
Даже думал, что он возвращает строку в руководстве (http://php.net/manual/en/sessionhandlerinterface.read.php), я также возвращал нулевое значение, вы спасли меня много времени :) – NiGhTHawK
Это сработало отлично. – geilt
Стоит отметить, что это также проблема, когда возвращается логическое значение (false) – pfwd