Я пытаюсь заставить Laravel 5.1 удалить мой файл cookie, однако он не будет удален, даже если я верну его с перенаправлением.
return redirect('/voucher')->withCookie(Cookie::forget($cookie));
Я сделал что-то не так?
Я пытаюсь заставить Laravel 5.1 удалить мой файл cookie, однако он не будет удален, даже если я верну его с перенаправлением.
return redirect('/voucher')->withCookie(Cookie::forget($cookie));
Я сделал что-то не так?
Возможно, я ошибаюсь, но вы, вероятно, используете объект cookie вместо имени файла cookie при вызове Cookie::forget($cookie)
. Если $cookie
не является строкой, содержащей имя файла cookie, вы должны попробовать что-то вроде этого:
return redirect('/voucher')->withCookie(Cookie::forget('cookie_name'));
Я знаю, что это уже старый вопрос, на который был дан ответ, но я попал сюда недавно, и если я прав, файл cookie должен быть «поставлен в очередь» для следующего ответа.
Вы можете сделать это, добавив файл cookie вручную в ответ, как @Jan.J уже описал в своем ответе. Но если вам нужно сделать это встроенным, это также может сработать для вас:
Cookie::queue(
Cookie::forget('cookieName')
);
CookieJar
передаст все куки в очереди следующему ответу.
В моем случае в файле cookie хранится array
, поэтому ни один из предоставленных методов не сработал. Массив следует удалить, предоставив ровно пару массивов:
Cookie::queue(Cookie::forget('array_name[provide_key]'));
Во-первых, убедитесь, что вы импортировали Cookie class
с ключевым словом use
, как показано ниже:
use Cookie;
Затем создайте функцию и удалите файл cookie по имени.
Cookie::queue(
Cookie::forget('cookie_name_first')
);
Cookie::queue(
Cookie::forget('cookie_name_second')
);
публичная функция funname(CookieJar $cookie)
session()->flush();
$cookie->очередь(cookie()->забыть('user_email')); $cookie->очередь(cookie()->забыть('user_password'));
return redirect('/');
К сожалению, ничего из вышеперечисленного не сработало для меня, я не уверен, что это конкретная проблема с этой версией Laravel (5.1).
Вместо этого мне удалось заставить его работать, используя необработанный PHP, перезаписав существующий файл cookie с уже просроченным, мне также пришлось указать путь, чтобы это заработало. Однако это не так элегантно, как использование фасада.
setcookie('COOKIE_NAME', time() - 3600, '/');
Вы также можете сделать это следующим образом:
redirect('/')->cookie(cookie()->forget('my_super_cookie_name'));
Недавно я столкнулся с этой проблемой, все еще находясь на локальном хосте, но проблема заключалась в том, что я написал некоторый код, который не был нормальным в моем процессе попытки перезаписать файл конфигурации сеанса. Поэтому Laravel по умолчанию
Cookie::queue(
Cookie::forget('name')
) ;
Должно работать отлично, если вы не вносили никаких изменений в файл конфигурации session.php. Проверьте это, и вы должны быть готовы идти. Если вы внесли какие-то изменения, постарайтесь убедиться, что ваш код соответствует стандарту и все должно работать нормально.
Ваш код идеален, поэтому есть другая проблема.
Файлы 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.