我无法从我在自定义中间件中设置的cookie中获取结果:
public function handle($request, Closure $next)
{
Cookie::queue('MyTestCookie', 'test', 45000);
return $next($request);
}
之后我打电话给 Cookie :: get(' MyTestCookie'); - 结果是 []
我做错了什么?
答案 0 :(得分:3)
您无法在设置的同一请求中访问Cookie。
基本工作流程是,您设置了一个cookie,这将附加响应。当响应发送回浏览器时,它将存储在浏览器中。然后,在下一个后续请求中,浏览器会将cookie附加到请求中,您可以从请求中获取cookie。
关于Cookie::queue
中的Laravel
方法,实际上queue
方法允许您创建Cookie,即使没有/创建响应,但最终,排队的Cookie不会立即附加到响应,因为响应是在脚本执行的最后时刻创建的。因此,排队的cookie存储在某个地方(CookieJar处理它),当框架发送响应时,它会检查是否有可用的排队cookie,如果有,那么框架会使用{{1}中的循环附加每个排队的cookie中间件,即:
AddQueuedCookiesToResponse
这是一个public function handle($request, Closure $next)
{
$response = $next($request);
foreach ($this->cookies->getQueuedCookies() as $cookie) {
$response->headers->setCookie($cookie);
}
return $response;
}
中间件,在处理完请求后运行(调用handle方法)。因此,您无法在设置它的同一请求中访问Cookie。
答案 1 :(得分:0)
@The Alpha - 谢谢你的回答 - 它帮助我理解了工作流程。
我的错误是我没有澄清我在哪里尝试获取cookie的价值。我将解释项目的工作流程:
在初始网站加载时,我为每个访问者创建一个包含默认数据的cookie。用户成功登录系统后 - 我将获取其默认cookie并根据其操作更新它。
用户请求网站(我正在创建一个cookie并将其排入响应) - >用户拥有网站主页并尝试登录系统(他使用cookie发送新请求,我通过主页发送给他) - >应用程序使用cookie获取请求并验证用户凭据是否正确 - 他使用“用户”视图接收响应。
问题是我在使用“用户”视图发送响应之前无法获取cookie值,但cookie存在。