Laravel 5.1 Cookie问题

5

我正在尝试在加载视图时设置一个cookie:

 $cookie = Cookie::make('mycookie', $myval, 43200);
 $view = view('myview')->with($data);
 return Response::make($view)->withCookie($cookie);

并在后续请求中读取cookie:

if (Cookie::has('mycookie')) {
   //do something
}

Cookie始终没有被设置……我做错了什么?

3个回答

4

以下是可靠地使用Laravel设置cookie的方法:

 use Illuminate\Http\Request;
 use Illuminate\Contracts\Cookie\Factory;

    class MyClass
    {

        public function handle(Request $request, Factory $cookie)
        {
            $cookie->queue($cookie->make('myCookie', $request->someVal, 129600));
            return redirect('/myPage');
        }

    }

3
你可以按照以下方式创建cookie。
$view = view('myview')->with($data);

$response = new Illuminate\Http\Response($view);

return $response->withCookie(cookie('name', 'value', $minutes));

或者您可以像下面这样排队cookie,它将随着下一个请求一起发送。
Cookie::queue('name', 'value');

return response('Hello World');

Read More


这个错误是由于在Illuminate\Http\Response类中找不到方法'withCookie'引起的。 - suncoastkid
因为方法已经存在,所以这很奇怪。https://github.com/laravel/framework/blob/5.1/src/Illuminate/Http/ResponseTrait.php - pinkal vansia
Cookie::queue('mycookie', $myval, 43200); $view = view('myview')->with($data); return response($view); 也不起作用。没有错误,但没有 cookie。 - suncoastkid
你可以尝试运行命令“sudo chmod 777 -R storage”,然后清除浏览器缓存。 - pinkal vansia
这正是我的问题所在。我返回了一个带有数据的视图。你需要返回一个“响应”对象来处理“请求”,以便withCookie()方法能够正常工作。谢谢! - KalC

1
你遇到的缺失cookie问题可能是由于无效的Blade指令导致的,页面会正常显示,但设置的任何cookie都不会持久化。
我遇到了这个问题,因为我在blade模板中包含了@script,而不是@section('script')
我怀疑cookie没有被设置的原因是错误的指令导致编译后的php代码出错,视图被缓存并且处理在传递cookie之前崩溃。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接