【发布时间】:2017-04-12 06:57:32
【问题描述】:
我正在尝试从 Laravel 5.3 中的中间件检索 cookie,但似乎 $request->cookie('language') 为空。我猜它只是在中间件运行后设置。
我在某处读到我应该使用 \Cookie::queued('language'),但它仍然是空的。
我唯一的选择是使用 $_COOKIE 变量吗?
【问题讨论】:
标签: laravel cookies laravel-5 session-cookies
我正在尝试从 Laravel 5.3 中的中间件检索 cookie,但似乎 $request->cookie('language') 为空。我猜它只是在中间件运行后设置。
我在某处读到我应该使用 \Cookie::queued('language'),但它仍然是空的。
我唯一的选择是使用 $_COOKIE 变量吗?
【问题讨论】:
标签: laravel cookies laravel-5 session-cookies
你什么时候设置这个cookie?
请记住,cookie 存储在浏览器中,因此用户需要获得响应,以便您以后能够检索 cookie。
在通过成功发送给用户的响应设置 cookie 后,您应该能够获取 cookie。另请记住,如果您使用 dd(),则不会创建 cookie,因为它会跳过所有 cookie 标头发送给用户。
您在尝试从中间件获取 cookie 时可能面临的另一个问题是它可能无法自动解密,因此您必须自己进行。
例子:
\Crypt::decrypt(Cookie::get('language'))
【讨论】:
如果有人在 2019 年使用 Laravel 5.8 遇到这个问题:
您需要使用\Crypt::decryptString(Cookie::get('language')) 或\Crypt::decrypt(Cookie::get('language'), false)。
否则它将尝试反序列化字符串,然后发生奇怪的事情。
【讨论】: