Je veux exécuter mon application dans localhost avec php artisan serve
mais je reçois cette erreur unserialize(): Error at offset 0 of 40 bytes
où est mon problème?
La même erreur s'est produite lorsque j'ai mis à niveau une application Laravel 5.5 vers la version 5.6. L'erreur provient de la EncryptCookies
- Middleware.
Supprimez les cookies de votre navigateur et/ou effacez vos fichiers de session dans votre application Laravel.
Vous devez définir une nouvelle clé Generate car
php artisan key:generate
Après ce test à nouveau pour exécuter l'application Laravel
php artisan serve
J'ai eu la même erreur il y a quelques jours lorsque j'ai envoyé une mise à jour de la production de mon projet Laravel de Envoyer .
Correctif immédiat: J'ai essayé de revenir au commit précédent, mais le problème persistait, ce qui signifie que le problème provenait du côté client, probablement des cookies. J'ai essayé de supprimer les cookies et le problème avait disparu.
Plus tard, j'ai passé beaucoup de temps à rechercher ce problème mais je n'ai rien eu jusqu'à ce que je sois confronté à ce problème aujourd'hui avec un autre déploiement et que j'ai trouvé cet article sur Nouvelles de Laravel sur le correctif de sécurité 5.6.30 mise à jour. J'ai pu identifier que ce problème se produisait si j'essayais de déployer la version précédente (<5.6.30) de laravel v5.6.26 pour un projet qui utilisait déjà> v5.6.30 et que des cookies étaient déjà créés (non validés), lesquels <5.6.30 La version de la structure tente de dissocier les résultats, car ils ne sont pas correctement rendus compatibles.
À partir du guide de mise à niveau:
Configuration de la sérialisation des cookies Étant donné que cette vulnérabilité n’est pas possible à exploiter sans accès à la clé de chiffrement de votre application, nous avons choisi de fournir un moyen de réactiver le cookie crypté la sérialisation tout en rendant votre application compatible avec ceux-ci changements. Pour activer/désactiver la sérialisation des cookies, vous pouvez modifier le Propriété static serialize de App\Http\Middleware\EncryptCookies middleware:
J'ai pu résoudre ce problème de façon permanente en effaçant le cache du composeur, le forçant ainsi à charger la dernière version du framework au lieu de revenir en cache.
J'espère que cela t'aides.
Bests,
J'ai rencontré le même problème. J'ai souvent fait face à ce problème dans un environnement homestead-vagrant ... Pour résoudre ce problème dans Laravel 5.4.5.5.5.6 ou plus -
php artisan config: effacer
vue artisan php: effacer
clé artisan php: générer
Dans mon cas, j'ai retiré mon composer.lock
et fait un composer install
et le tour est joué ...
$ cd project_root
$ rm composer.lock
$ composer install
Dans App\Exceptions\Handler sous la fonction de rendu, utilisez cet extrait, il réinitialisera le cookie du navigateur.
if (str_contains($exception->getMessage(), 'unserialize')) {
$cookie1 = \Cookie::forget('laravel_session');
$cookie2 = \Cookie::forget('XSRF-TOKEN');
return redirect()->to('/')
->withCookie($cookie1)
->withCookie($cookie2);
}
J'ai également rencontré ce problème lorsque j'ai mis à jour mon compositeur. Si vous mettez
protected static $serialize = true;
dans App\Http\Middleware\EncryptCookies, l'ancien cookie endommagera votre système. Donc, pour éviter cela, vous devez soit effacer le cookie, soit simplement ne pas désérialiser le cookie déchiffré. .php Au-dessus de cette ligne de la fonction decrypt ():
return $unserialize ? unserialize($decrypted) : $decrypted;
ajouter:
try {
$workaround = unserialize($decrypted);
return $unserialize ? unserialize($decrypted) : $decrypted;
} catch (\Exception $e){
return $decrypted;
}
C'est peut-être moche, mais vous pouvez y mettre temporairement jusqu'à ce que vous pensiez que les anciens cookies sont partis.