Laravel 5.2:空饼干

时间:2016-11-26 12:47:33

标签: php laravel cookies middleware

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

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

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

之后我打电话给 Cookie :: get(' MyTestCookie'); - 结果是 []

我做错了什么?

2 个答案:

答案 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存在。