【发布时间】: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