为什么我的 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的Route方法
- 使用旧 PHP setcookie
- 使用 Cookie:make 和 Cookie:forever
- 在EncryptCookies
的例外中添加'customer_id'
- 将路由放在 web 中间件中
- 正在擦除 php artisan 缓存,重新启动 vagrant
- 通过 chmod 使会话文件夹可编辑
然而,在应用上述所有方法后,每次页面加载后 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。参见
我在 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的Route方法
- 使用旧 PHP setcookie
- 使用 Cookie:make 和 Cookie:forever
- 在EncryptCookies 的例外中添加'customer_id'
- 将路由放在 web 中间件中
- 正在擦除 php artisan 缓存,重新启动 vagrant
- 通过 chmod 使会话文件夹可编辑
然而,在应用上述所有方法后,每次页面加载后 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。参见