为什么我的 cookie 没有在 Laravel 中持续存在(使用 Homestead、Vagrant)?

Why are my cookies not persisting in Laravel (using Homestead, Vagrant)?

我在 Windows 10 中一直在命令提示符下使用 Laravel,但是项目之间切换的困难让我转而使用 Homestead .但是,在我在那里开始的一个新项目中,我终生无法让 cookie 持续存在。 这是我当前的代码(仅用于调试此问题):

use Illuminate\Support\Facades\Cookie;

// ......

public function __construct(Request $request) {
    $customer_id = Cookie::get('customer_id');
    if(!$customer_id) {
        Cookie::queue('customer_id', time(), 3600);
    }
    dd($customer_id);
}

预期输出: 在连续的页面加载中,访问者将看到与他们最初打开页面时相同的 unix 时间戳(我知道这不是处理它的好方法,同样,这只是为了重现错误。)

现实:每次页面加载都会产生不同的时间戳。

我查找了尽可能多的讨论。我尝试过的解决方案:

然而,在应用上述所有方法后,每次页面加载后 cookie 仍然消失。

由于我在 Xampp 的 PHP 之前没有遇到过这样的问题,我不得不假设 Vagrant 存在一个(希望如此)微不足道且明显的问题,我还不知道.任何建议表示赞赏!

排队的 cookie 仅与响应一起发送,因此请确保您的控制器函数执行 return 一个。

use Illuminate\Support\Facades\Cookie;

// ......

public function __construct(Request $request) {
    $customer_id = Cookie::get('customer_id');
    if(!$customer_id) {
        Cookie::queue('customer_id', time(), 3600);
    }
}

public function foo() {
    ...

    return response('some text');
}

此外,如果使用某种 api,您必须添加一个中间件以在响应中包含 cookie。参见