我正试图从Laravel 5.3中的中间件中检索一个cookie,但似乎$ request-> cookie('language')是空的。我猜它只是在中间件运行后设置的。
我在某处读到了我应该使用\ Cookie :: queued('language'),但它仍然是空的。
我唯一的选择是使用$ _COOKIE变量吗?
你什么时候设置这个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)
。
否则它将尝试反序列化字符串,然后发生奇怪的事情。