Как исправить предупреждение "Cookie 'cookie_name' will be rejected soon ...", которое я получаю после удаления cookie?
Firefox выбрасывает следующее предупреждение после удаления действительного cookie:
Куки "cookie_name" будет вскоре отклонена, потому что у нее атрибут "SameSite" установлен на "None" или недопустимое значение, без атрибута "secure". Чтобы узнать больше об атрибуте "SameSite", прочитайте https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite
.
Сценарий
<После правильного входа в систему я отправляю cookie на frontend. Этот файл cookie может быть использован во время моей сессии без каких-либо проблем или предупреждений. Консоль разработки также показывает мне ожидаемые значения: и .
В процессе выхода из системы установленный файл cookie удаляется установкой max-age=0
или expire=<date_in_past>
. Браузер удаляет cookie немедленно, как и ожидалось, но я также получаю предупреждение, упомянутое выше. Неважно, удаляю ли я cookie в бэкенде или фронтенде - сообщение всегда будет показано.
Код
Set Cookie - Backend (django):
class Login():
def post(self, request):
...
response = Response(status=status.HTTP_200_OK, ...)
response.set_cookie("cookie_name", value, max_age=60*60*5, secure=True, httponly=False, samesite='strict')
return response
Remove Cookie - Frontend: (предпочтительный способ для этой cookie в моем сценарии до сих пор)
function removeItem(key, path, domain) {
...
document.cookie =
encodeURIComponent(key) +
// "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" +
"=; max-age=0" +
(domain ? "; domain=" + domain : "") +
(path ? "; path=" + path : "");
return true;
},
}
Удаление Cookie - Backend (django): (перечислено только для полноты; приводит к тому же предупреждению)
class Logout():
def post(self, request):
...
response = Response(status=status.HTTP_200_OK, ...)
response.delete_cookie("cookie_name")
return response
Есть ли лучший способ удаления cookies, который не приводит к предупреждению?
Нужно добавить атрибуты samesite/secure cookie при установке cookie, иначе браузер может его отклонить.