当前位置:  开发笔记 > 编程语言 > 正文

在Laravel自定义中间件中设置Cookie

如何解决《在Laravel自定义中间件中设置Cookie》经验,为你挑选了1个好方法。

我想在自定义Laravel中间件中设置一个cookie.我们的想法是在用户通过任何目标网页访问我的网站时设置Cookie值.

所以我做的是创建了一个名为的中间件UUIDMiddleware.我在我的路线中使用这个中间件和Web中间件.以下是来自中间件的代码.

if($request->hasCookie('uuid'))
{
    return $next($request);    
}
else
{
    $uuid = Uuid::generate();
    $response = new Response();
    return $response->withCookie(cookie()->forever('uuid', $uuid));
}

如您所见,我正在检查cookie是否存在.如果没有,我将控制传递给下一个请求.

问题是当使用cookie设置时return $response,我无法将控制传递给下一个请求.我该如何解决这个问题?

在这种情况下会发生的情况是,如果未设置cookie,则会设置cookie并显示空白屏幕.如果我刷新,我会看到带有cookie集的网站.

必须有一种方法以正确的方式使用中间件设置cookie.我该怎么做?



1> 小智..:

您可以在中间件中获取响应对象,如下所示:

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

    // Do something after the request is handled by the application

    return $response;
}

所以你可以这样做

if($request->hasCookie('uuid')) {
    return $next($request);    
}

$uuid = Uuid::generate();
$response = $next($request);
return $response->withCookie(cookie()->forever('uuid', $uuid));


这似乎不再起作用了.调用`$ next($ request)`无论你是否返回它都会中断handle方法并继续请求.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有