Почему мои куки не сохраняются в Laravel (используется Homestead, Vagrant)? - PullRequest
1 голос
/ 04 апреля 2020

Я использовал Laravel из командной строки в Windows 10, но сложность переключения между проектами заставила меня переключиться на использование Homestead . Тем не менее, в новом проекте, который я начал там, я не могу на всю жизнь получить куки для сохранения. Вот мой текущий код (только для отладки этой проблемы):

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
  • Использование старого доброго PHP setcook ie
  • Использование Cook ie: make и Cook ie: навсегда
  • Добавление 'customer_id' в исключения среди EncryptCookies
  • Размещение маршрута в промежуточном веб-программном обеспечении
  • Стирание php кэш ремесленника, restarting vagrant
  • Создание папки сеанса для редактирования через chmod

И все же, после применения всего вышеперечисленного, повар ie по-прежнему пропадает после каждой загрузки страницы.

Так как у меня не было таких проблем, как это до PHP Xampp, я должен предположить, что есть (надеюсь) тривиальная и очевидная проблема с Vagrant, которую я еще не знаю. Любой совет приветствуется!

1 Ответ

2 голосов
/ 04 апреля 2020

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, вам нужно добавить промежуточное программное обеспечение, чтобы включить куки в ответ. См. Laravel 5.4 - Повар ie Очередь

...