Как удалить куки файл в ответе HTTP?

Какой предпочтительный способ указать браузеру удалить (или больше не использовать) HTTP файл cookie, выпущенный для данного домена в ответе HTTP?

(Я понимаю, что вы не можете заставить браузер удалять файл cookie, но должен быть способ указать, что он больше недействителен и больше не должен отправляться)

Ответ 1

Просто установите cookie на одно и то же имя, путь и домен, но с прошлым значением Expires. Необязательно, установите значение null/empty-string, даже если оно просто для сохранения полосы пропускания, иначе оно игнорируется обычным клиентом.

Обратите внимание, что настройка на одном и том же пути важна. Многие стартеры терпят неудачу в этом, используя только одно имя и домен и полагаясь на текущий URL-адрес запроса для пути по умолчанию.

Из спецификации RFC6265:

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

Использование Max-Age=0 также будет работать с любым совместимым с спецификации агентом пользователя, но спецификация требует, чтобы сервер "СЛЕДУЕТ" не делать этого. По https://www.rfc-editor.org/errata/eid3430 это, по-видимому, предназначено для максимальной совместимости с несовместимыми пользовательскими агентами, которые поддерживают только положительные значения Max-Age.

Ответ 2

Вы можете установить время до 0 или в любое время, которое истекло.

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

// Use the following for immediate elimination for current running server script
unset($_COOKIE['cookiename']); 

// In order to eliminate all together which involves notifying client-side. Expire time
setcookie('cookiename', '', time() - 3600);