Я хочу запустить мое приложение в localhost с помощью php artisan serve
но я получаю эту ошибку unserialize(): Error at offset 0 of 40 bytes
где моя проблема?
unserialize(): Ошибка при смещении 0 из 40 байтов Ошибка
Ответ 1
Я получил ту же ошибку, когда обновляю приложение Laravel 5.5 до 5.6. Ошибка возникает из EncryptCookies
-Middleware.
Удалите файлы cookie в своем браузере и/или очистите файлы сеанса в своем приложении Laravel.
Ответ 2
Вы должны установить новостной ключ Generate, потому что
php artisan key:generate
После этого теста снова запустить приложение Laravel
php artisan serve
Ответ 3
Я столкнулся с той же проблемой. Я часто сталкивался с этой проблемой в Бродячей среде. Чтобы решить эту проблему в Laravel 5.4,5.5,5.6 или более -
Конфигурация PHP Artisan: очистить
php artisan view: очистить
Ключ ремесленника php: генерировать
Ответ 4
Я получил ту же ошибку пару дней назад, когда я подтолкнул производственное обновление к моему проекту Laravel от Envoyer.
Немедленное исправление: я попытался откат к предыдущей фиксации, но проблема осталась, что означает, что проблема возникла с клиентской стороны, возможно, файлы cookie. Я попытался удалить файлы cookie, и проблема исчезла.
Позже, я потратил много времени на поиск этой проблемы, но ничего не получил, пока не столкнулся с этой проблемой снова с другим развертыванием, и я нашел эту статью в новостях Laravel об исправлении безопасности 5.6.30. Я смог определить, что эта проблема возникает, если я пытаюсь развернуть предыдущую (<5.6.30) версию laravel v5.6.26 для проекта, который уже использовал> v5.6.30, и файлы cookie уже были созданы (не serliazed), которые когда <5.6.30 версия фреймворка пытается сгладить результаты с ошибкой, потому что они не сортируются должным образом.
- Установка laravel/framework (v5.6.26) Загрузка из кеша
Настройка сериализации файлов cookie Поскольку эта уязвимость не может быть использована без доступа к ключу шифрования приложения, мы решили предоставить способ повторно включить шифрованную сериализацию файлов cookie, пока вы совместите свое приложение с этими изменениями. Чтобы включить/отключить сериализацию файлов cookie, вы можете изменить свойство static serialize промежуточного ПО App\Http\Middleware\EncryptCookies:
Я смог исправить эту проблему навсегда, очистив кэш композитора, чтобы заставить его загружать последнюю версию фреймворка вместо того, чтобы возвращаться в кеш.
Надеюсь это поможет.
Bests,
Ответ 5
Просто осмотрите элемент в Браузере, перейдите на вкладку приложения, выберите cookie и удалите все cookie. Это.
Ответ 6
В моем случае я удалил свой composer.lock
и установил composer install
и вуаля...
$ cd project_root
$ rm composer.lock
$ composer install
Ответ 7
В App\Exceptions\Handler под функцией рендеринга используйте этот фрагмент, он сбросит cookie браузера.
if (str_contains($exception->getMessage(), 'unserialize')) {
$cookie1 = \Cookie::forget('laravel_session');
$cookie2 = \Cookie::forget('XSRF-TOKEN');
return redirect()->to('/')
->withCookie($cookie1)
->withCookie($cookie2);
}
Ответ 8
Я также столкнулся с этой проблемой, когда мне довелось обновить моего композитора. Если вы поставите
protected static $serialize = true;
внутри App\Http\Middleware\EncryptCookies, старый cookie сломает вашу систему. Поэтому, чтобы предотвратить это, вы должны либо очистить cookie, либо просто не десериализировать дешифрованный cookie.
Я сделал обходной путь для этого: Внутренний поставщик /Laravel/Framework/SRC/Освещение/Шифрование /Encrypter.php Над этой строкой функции decrypt():
return $unserialize ? unserialize($decrypted) : $decrypted;
добавить:
try {
return $unserialize ? unserialize($decrypted) : $decrypted;
} catch (\Exception $e){
return $decrypted;
}
Это может быть некрасиво, но вы можете временно положить его туда, пока не решите, что старые куки исчезли.
Ответ 9
да, для localhost вы можете просто удалять файлы cookie, но для производства поместите это в обработчик ошибок, чтобы пользователи не увидели whoops:
if (strpos($exception->getMessage(), 'unserialize(): Error at offset 0 of 40 bytes') === 0) {
unset($_COOKIE['laravel_session']);
unset($_COOKIE['XSRF-TOKEN']);
setcookie('laravel_session', null, -1, '/');
setcookie('XSRF-TOKEN', null, -1, '/');
abort(200, '', ['Location' => route('frontend.home')]);
}
PS. проверено на laravel 5.6.
Ответ 10
вы просто запустите в терминале
composer global update