Laravel 5.2: 空 cookie

Laravel 5.2: Empty cookie

我无法从我在自定义中间件中设置的 cookie 中获取结果:

public function handle($request, Closure $next)
{

    Cookie::queue('MyTestCookie', 'test', 45000);
    return $next($request);
}

之后我调用 Cookie::get('MyTestCookie'); - 结果是 [ ]

我哪里做错了?

简答:

您不能在您设置 cookie 的同一请求中访问 c​​ookie。

一点解释:

基本工作流程是,您设置一个 cookie,这将与响应一起附加。当响应发送回浏览器时,它将存储在浏览器中。然后,在下一个后续请求中,浏览器会将 cookie 附加到请求中,您可以从请求中获取 cookie。

关于 Laravel 中的 Cookie::queue 方法,实际上 queue 方法允许您创建一个 cookie,即使没有 having/creating 响应,但最终,排队的 cookie 不是立即附加到响应,因为响应是在脚本执行的最后一刻创建的。因此,排队的 cookie 存储在某个地方(CookieJar 处理它),当框架发送响应时,它检查是否有可用的排队 cookie,如果有,则框架使用 [=14= 中的循环附加每个排队的 cookie ] 中间件,即:

public function handle($request, Closure $next)
{
    $response = $next($request);

    foreach ($this->cookies->getQueuedCookies() as $cookie) {
        $response->headers->setCookie($cookie);
    }

    return $response;
}

这是一个 after 中间件,它在处理完请求后运行(调用 handle 方法)。因此,您无法在设置它的同一请求中访问该 cookie。

@The Alpha - 谢谢你的回答 - 它帮助我理解了工作流程。

我的错误是我没有说明我究竟在何处尝试获取 cookie 的值。我将解释项目的工作流程:

我的项目工作流程

在初始网站加载时,我为每位访问者创建了一个包含默认数据的 cookie。用户成功登录系统后 - 我正在获取他的默认 cookie 并根据他的操作更新它。

用户请求网站(我正在创建一个 cookie 并将其排队到响应中)-> 用户拥有网站主页并尝试登录系统(他使用我发送给他的 cookie 发出新请求与主页)-> 应用程序接受带有 cookie 的请求并验证用户凭据是否正确 - 他收到用户视图的响应。

问题是在我用用户视图发送响应之前我无法获取 cookie 值,但 cookie 存在。