django 如何修复删除Cookie后收到的警告“Cookie 'cookie_name'将很快被拒绝.”?

jv4diomz  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(115)

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=0expire=<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?

iezvtpos

iezvtpos1#

您需要做的是在设置cookie时添加samesite/secure cookie属性,否则可能会被浏览器拒绝。
为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题:Debugging cookie problems

相关问题