【问题标题】:Get a cookie in Laravel 5 middleware在 Laravel 5 中间件中获取 cookie
【发布时间】:2017-04-12 06:57:32
【问题描述】:

我正在尝试从 Laravel 5.3 中的中间件检索 cookie,但似乎 $request->cookie('language') 为空。我猜它只是在中间件运行后设置。

我在某处读到我应该使用 \Cookie::queued('language'),但它仍然是空的。

我唯一的选择是使用 $_COOKIE 变量吗?

【问题讨论】:

    标签: laravel cookies laravel-5 session-cookies


    【解决方案1】:

    你什么时候设置这个cookie?

    请记住,cookie 存储在浏览器中,因此用户需要获得响应,以便您以后能够检索 cookie。

    在通过成功发送给用户的响应设置 cookie 后,您应该能够获取 cookie。另请记住,如果您使用 dd(),则不会创建 cookie,因为它会跳过所有 cookie 标头发送给用户。

    您在尝试从中间件获取 cookie 时可能面临的另一个问题是它可能无法自动解密,因此您必须自己进行。

    例子:

    \Crypt::decrypt(Cookie::get('language'))
    

    【讨论】:

    • +1 提到了中间件中的非自动解密,我使用您的解决方案解决了问题
    【解决方案2】:

    如果有人在 2019 年使用 Laravel 5.8 遇到这个问题:
    您需要使用\Crypt::decryptString(Cookie::get('language'))\Crypt::decrypt(Cookie::get('language'), false)
    否则它将尝试反序列化字符串,然后发生奇怪的事情。

    【讨论】:

    • 另外,对于 Laravel 6+,cookie 设置引擎会自动为每个 cookie 值添加前缀。解密后,您需要调用 \Illuminate\Cookie\CookieValuePrefix::remove($decryptedCookieValue);
    猜你喜欢
    • 2016-04-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多