Abort(404) 使我的 Cookie::get('...') 成为一个随机散列而不是它应该是的

Abort(404) makes my Cookie::get('...') to a random hash instead of what it's supposed to be

当我使用 laravel 中止 404 时,或者当它本身是 404 时,我的 Cookie::get('department') 将自身从:

转换

"Oslo"

"eyJpdiI6IjdOaDJSZ29jWXd2OHhmbzVNNHNBemc9PSIsInZhbHVlIjoiYmdoOVdWN2RFRUdjNlhEa2w4cUl1Zz09IiwibWFjIjoiM2NiNWRhOGIyNWMzYzg4Mzc2ZTM2YmZlNTFkNmY4MWZkNGM3ODE3ZmJhMDhkZWRmNGY1ZDgxNDMzYjhmYmY1NyJ9 ◀eyJpdiI6IjdOaDJSZ29jWXd2OHhmbzVNNHNBemc9PSIsInZhbHVlIjoiYmdoOVdWN2RFRUdjNlhEa2w4cUl1Zz09IiwibWFjIjoiM2NiNWRhOGIyNWMzYzg4Mzc2ZTM2YmZlNTFkNmY4MWZkNGM3ODE3ZmJhMDhk ▶"

它适用于所有其他页面。

因为我使用 cookie 来获取所选部门的正确联系信息,所以它无法在我的数据库中找到那个长字符串(它应该是“Oslo”)我每次页面 404 时都会收到错误

Laravel 在所有请求中默认使用 EncryptCookie middleware。你可以在中间件的$except属性中指定不应该加密的cookies:

class EncryptCookies extends Middleware
{
    protected $except = [
        'department'
    ];
}

接受的答案存在安全风险,因为您只是禁用了您可能不想要的 cookie 的加密。

真正的原因是404页面不是网络路由中的页面。 中间件列表 web 未使用。

如果您想在 404 页面上使用加密 cookie,您需要将 \App\Http\Middleware\EncryptCookies::class, 添加到 kernel.php

中的全局中间件列表

app/Http/Kernel.php:

/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array
 */
protected $middleware = [
   \App\Http\Middleware\EncryptCookies::class, // ADD THIS LINE
];