Как работать с файлами cookie в Laravel 5.2

Я устанавливаю cookie на событие click. Затем, после сохранения значения в cookie, я хочу

  1. Проверьте наличие cookie
  2. Получить значения cookie

Я разработал функцию, обратившись к официальным документам Laravel. Консоль показывает, что файлы cookie установлены. Но после этого я не могу решить две точки (упомянутые в приведенном выше списке) для просмотра (Blade Template). Он всегда показывает (Cookie::get('cookie.clients')) 'null'. Но консоль браузера отображает этот файл cookie. Если кто-то знает ответ, это будет оценено.

Вот мой код.

контроллер

 use App\Client; use App\Http\Requests; use Illuminate\Http\Request; use Validator; use App\Http\Controllers\Controller; use App\Repositories\ClientRepository; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cookie; class ClientController extends Controller { public function cookieadd(Request $request, Client $client) { $clients = []; if (Cookie::get('cookie.clients') != null) { $clients = Cookie::get('cookie.clients'); } array_push($clients, $client); Cookie::forever('cookie.clients', $clients); return redirect('/client'); } } 

Посмотреть

 @if (Cookie::get('cookie.clients') != null) <p>cookie is set</p> @else <p>cookie isn't set</p> @endif 

Вы создаете объект cookie, но вы не отправляете его с ответом.

Вы можете либо добавить его прямо к ответу в контроллере

 $cookie = Cookie::forever('cookie.clients', $clients); return redirect('/client')->withCookie($cookie); 

Или вы можете поставить в очередь куки-файл и использовать промежуточное программное обеспечение AddQueuedCookiesToResponse для автоматического добавления его в ответ.

 Cookie::queue(Cookie::forever('cookie.clients', $clients)); return redirect('/client'); 

Вы пытались отобразить файл cookie через объект Request?

 $value = $request->cookie('name'); 

Дополнительную информацию см. В документе laravel: https://laravel.com/docs/5.2/requests#cookies

Вот еще одна перспектива.

Если я правильно понял, вы использовали Javascript для установки cookie на стороне клиента, и вы хотите забрать его на стороне сервера.

Laravel шифрует свои файлы cookie, и когда вы используете $request->cookies() вы получаете дешифрованные значения, а извлечение файлов cookie с клиентской стороны не проходит процесс дешифрования, и мы получаем null s. Я думаю, я не смог выкопать соответствующий исходный код 🙂

Вы можете использовать необработанный PHP $_COOKIE['cookie_clients'] чтобы получить cookie, установленный клиентом. Обратите внимание,. преобразуется в _ через PHP ( как видно на php.net ).

Кроме того, вы можете добавить имя интересующего файла cookie в $except Http/Middleware/EncryptCookies.php , что позволит вам забрать его с помощью подхода Larevel в $request->cookie() .

Я уверен, что здесь есть много других способов обойти Laravel, надеюсь, это даст вам представление о том, где искать, если вам не нравится любой подход. Удачи.