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 的同一请求中访问 cookie。
一点解释:
基本工作流程是,您设置一个 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 存在。
我无法从我在自定义中间件中设置的 cookie 中获取结果:
public function handle($request, Closure $next)
{
Cookie::queue('MyTestCookie', 'test', 45000);
return $next($request);
}
之后我调用 Cookie::get('MyTestCookie'); - 结果是 [ ]
我哪里做错了?
简答:
您不能在您设置 cookie 的同一请求中访问 cookie。
一点解释:
基本工作流程是,您设置一个 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 存在。