Firefox在删除有效Cookie后会抛出以下警告:
Cookie“cookie_name”将很快被拒绝,因为它的“SameSite”属性设置为“None”或无效值,而没有“secure”属性。要了解有关“SameSite”属性的更多信息,请阅读https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite
场景
在一个有效的登录后,我发送一个cookie到前端。这个cookie可以在我的会话期间使用,没有任何问题或警告。开发控制台还显示了预期值:SameSite: "Strict"
和Secure: true
。
在注销过程中,通过设置max-age=0
或expire=<date_in_past>
删除设置的cookie。浏览器会像预期的那样立即删除cookie,但我也会收到上面提到的警告。如果我在后端或前端删除cookie并不重要-消息将始终显示。
验证码
- 设置Cookie -后端(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
- 删除Cookie -前端 *:(到目前为止,在我的场景中,此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 -后端(django)*:(仅为完整性而列出;结果相同的警告)
class Logout():
def post(self, request):
...
response = Response(status=status.HTTP_200_OK, ...)
response.delete_cookie("cookie_name")
return response
是否有更好的方法来删除不会导致警告的Cookie?
1条答案
按热度按时间iezvtpos1#
您需要做的是在设置cookie时添加samesite/secure cookie属性,否则可能会被浏览器拒绝。
为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题:Debugging cookie problems