Cookie::forget не работает laravel 5.1

Я пытаюсь заставить Laravel 5.1 удалить мой файл cookie, однако он не будет удален, даже если я верну его с перенаправлением.

return redirect('/voucher')->withCookie(Cookie::forget($cookie));

Я сделал что-то не так?


person V4n1ll4    schedule 11.08.2015    source источник
comment
Какова ценность $cookie?   -  person Nicolas Beauvais    schedule 11.08.2015


Ответы (9)


Возможно, я ошибаюсь, но вы, вероятно, используете объект cookie вместо имени файла cookie при вызове Cookie::forget($cookie). Если $cookie не является строкой, содержащей имя файла cookie, вы должны попробовать что-то вроде этого:

return redirect('/voucher')->withCookie(Cookie::forget('cookie_name'));
person Jan.J    schedule 11.08.2015

Я знаю, что это уже старый вопрос, на который был дан ответ, но я попал сюда недавно, и если я прав, файл cookie должен быть «поставлен в очередь» для следующего ответа.

Вы можете сделать это, добавив файл cookie вручную в ответ, как @Jan.J уже описал в своем ответе. Но если вам нужно сделать это встроенным, это также может сработать для вас:

Cookie::queue(
    Cookie::forget('cookieName')
);

CookieJar передаст все куки в очереди следующему ответу.

person Robin van Baalen    schedule 02.06.2016
comment
Вы спасли мой день. Для меня это довольно необычный синтаксис =\ - person Victor; 06.03.2017

В моем случае в файле cookie хранится array, поэтому ни один из предоставленных методов не сработал. Массив следует удалить, предоставив ровно пару массивов:

Cookie::queue(Cookie::forget('array_name[provide_key]'));
person Gediminas    schedule 11.07.2017

Во-первых, убедитесь, что вы импортировали Cookie class с ключевым словом use, как показано ниже:

use Cookie;

Затем создайте функцию и удалите файл cookie по имени.

Cookie::queue(
  Cookie::forget('cookie_name_first')
);

Cookie::queue(
  Cookie::forget('cookie_name_second')
);
person Sumit Kumar Gupta    schedule 24.02.2020

публичная функция funname(CookieJar $cookie)

    session()->flush();

$cookie->очередь(cookie()->забыть('user_email')); $cookie->очередь(cookie()->забыть('user_password'));

return redirect('/');
person Davinder Singh    schedule 20.12.2018

К сожалению, ничего из вышеперечисленного не сработало для меня, я не уверен, что это конкретная проблема с этой версией Laravel (5.1).

Вместо этого мне удалось заставить его работать, используя необработанный PHP, перезаписав существующий файл cookie с уже просроченным, мне также пришлось указать путь, чтобы это заработало. Однако это не так элегантно, как использование фасада.

setcookie('COOKIE_NAME', time() - 3600, '/');
person Fillie    schedule 09.05.2019

Вы также можете сделать это следующим образом:

redirect('/')->cookie(cookie()->forget('my_super_cookie_name'));
person Bond77    schedule 06.02.2019

Недавно я столкнулся с этой проблемой, все еще находясь на локальном хосте, но проблема заключалась в том, что я написал некоторый код, который не был нормальным в моем процессе попытки перезаписать файл конфигурации сеанса. Поэтому Laravel по умолчанию

Cookie::queue(
   Cookie::forget('name')
      ) ;

Должно работать отлично, если вы не вносили никаких изменений в файл конфигурации session.php. Проверьте это, и вы должны быть готовы идти. Если вы внесли какие-то изменения, постарайтесь убедиться, что ваш код соответствует стандарту и все должно работать нормально.

person Emmanuel David    schedule 27.05.2019

Ваш код идеален, поэтому есть другая проблема.

Файлы cookie — это хитрые маленькие ^##$$, и, что еще хуже, они зависят от реализации клиента; различные браузеры могут по-разному обрабатывать крайние случаи использования файлов cookie или даже иметь long -постоянные ошибки, связанные с обработкой файлов cookie.

Удаление файла cookie фактически включает в себя отправку обновления файла cookie, но с истекшим сроком действия. Из rfc 6265:

Наконец, чтобы удалить файл cookie, сервер возвращает заголовок Set-Cookie с датой истечения срока действия в прошлом. Сервер успешно удалит файл cookie, только если атрибуты Path и Domain в заголовке Set-Cookie совпадают со значениями, использованными при создании файла cookie.

Если ваш код Laravel выглядит нормально, как в исходном вопросе, я бы посоветовал проверить ваши файлы cookie в инструментах разработчика вашего браузера. Например, на вкладке «Сеть» в Chrome есть вкладка «Файлы cookie», которая показывает файлы cookie запроса и файлы cookie ответа. Вы можете обнаружить, что существует тонкая разница между исходным файлом cookie и файлом cookie, отправляемым для его отмены. Согласно приведенному выше RFC, разница в домене (даже просто ведущая точка) нарушит удаление файла cookie.

person jeff-h    schedule 28.07.2020