我为子域本地化写了package。但是,解密Cookie的工作无处不在。
我的语言环境测试网站正在运行,但是我需要取消安全性才能使用Laravel代客共享。现在,当我再次将其更改为代客保护时,我的网站不再起作用。我收到了ErrorException:
unserialize(): Error at offset 0 of 2 bytes
在
//Illuminate/Encryption/Encrypter.php
Row 149. return $unserialize ? unserialize($decrypted) : $decrypted;
我不知道为什么。我没有更改我的app_key,我删除了该页面的所有cookie,但是仍然无法正常运行(并且在过去3周内运行良好)。
如果您查看here或缩短的代码:
return decrypt(request()->cookie('tongue-locale'));
您看到我正在解密cookie的内容。如果您好奇为什么我需要解密cookie,那是因为中间件“ \ App \ Http \ Middleware \ EncryptCookies :: class”稍后会启动。
有人知道为什么它不起作用吗?
答案 0 :(得分:3)
我使用以下解决方案解决了该问题:https://laravel.com/docs/5.6/upgrade#upgrade-5.6.30
添加此行:
protected static $serialize = true;
致app\Http\Middleware\EncryptCookies.php
答案 1 :(得分:2)
我不知道发生了什么,但是我需要将代码更改为:
app('encrypter')->decrypt(request()->cookie(self::COOKIE), false);
如果为“ false”,则反序列化将被忽略。但是,我仍然想知道为什么它不起作用。
如果您翻译此部分
return $unserialize ? unserialize($decrypted) : $decrypted;
变量$ unserialize = true和$ decrypted =“ de”很明显它失败了,但是我想知道为什么以前没有。.
答案 2 :(得分:0)
对我来说,它可以运行下一个工匠命令
php artisan key:generate
答案 3 :(得分:0)
警告!如果您已经加密了数据,就不会将“ php artisan key:generate”设置为“ undecryptable”。