【问题标题】:Why are my cookies not persisting in Laravel (using Homestead, Vagrant)?为什么我的 cookie 没有保留在 Laravel 中(使用 Homestead、Vagrant)?
【发布时间】:2020-07-16 03:03:21
【问题描述】:

我一直在 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 时间戳(我知道这不是处理它的好方法,再说一次,这只是用于重现错误。)

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

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

  • 使用Route方法声明cookie
  • 使用古老的 PHP setcookie
  • 使用 Cookie:make 和 Cookie:forever
  • 在 EncryptCookies 的异常中添加“customer_id”
  • 将路由放置在 Web 中间件中
  • 清除 php artisan 缓存,重启 vagrant
  • 通过 chmod 使会话文件夹可编辑

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

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

【问题讨论】:

  • 你在哪个班级使用这个?
  • @Jonathan 它位于我通过 php artisan 创建的自定义控制器中。基本上没有什么花哨的。
  • 你到底想用 Cookie 做什么?您需要通过$customerId = Cookie::get('customer_id'); 进一步访问(肯定应该是)什么?
  • @Jonathan 你说得对,我附加的代码很不稳定,我更新了它。在我的辩护中,这只是我创建的一个快速可重复的示例,现在大约是第 20 次迭代,这让我认为这是正确设置 Homestead 服务器的一个问题。 - 基本思路是:当新客户打开页面时,会在 cookie 中为他们分配一个唯一的 id,即使他们关闭浏览器并稍后返回,他们也可以通过该 id 继续填写同一个多页问卷。

标签: php laravel cookies vagrant homestead


【解决方案1】:

排队的 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);
    }
}

public function foo() {
    ...

    return response('some text');
}

另外,如果使用某种 api,您必须添加一个中间件以在响应中包含 cookie。见Laravel 5.4 - Cookie Queue

【讨论】:

  • 哇,我不敢相信它这么简单,但现在它可以工作了......我整个下午都在这个问题上弹跳!谢谢你,丹尼尔!所以最后,如果我理解正确,我的问题是我从来没有离开过构造函数,总是 dd-d 或退出一些东西。现在我觉得很笨。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2017-05-05
  • 2016-10-29
  • 2019-08-02
相关资源
最近更新 更多