Cookie“ cookieName”将很快被拒绝,因为它的“ sameSite”属性设置为“ none”或clearCookie上的值无效

时间:2020-05-21 10:56:45

标签: express firefox cookies

我有一个带有以下代码的快速API,用于设置Cookie:

...
res.setHeader("Access-Control-Allow-Origin", ip);
res.cookie(name, token, { maxAge: 30000, httpOnly: true, secure: false, sameSite: "Lax" });
...

另一个清除cookie:

...
res.clearCookie(name);
...

执行第二个命令时,出现以下错误消息: Cookie“ cookieName”即将被拒绝,因为它的“ sameSite”属性设置为“ none”或在clearCookie上的值无效

一些细节:

  • 该错误仅在Firefox中显示,而不在Chrome中显示。
  • 在设置sameSite:“ Lax”之前,在设置cookie后以及清除cookie时,我两次收到错误消息。将sameSite设置为Lax后,问题仅在清除cookie时出现。

有帮助吗?让我知道您是否需要更多详细信息,版本,代码...

2 个答案:

答案 0 :(得分:1)

您正面临HTTP问题。一般规则是,设置或删除Cookie时,必须将所有参数设置为相同(值和到期时间除外)。答案https://stackoverflow.com/a/20320610/941493RFC 6265中描述了解决问题的正确方法。

最后,要删除Cookie,服务器将返回一个Set-Cookie标头,其中包含过去的到期日期。仅当Set-Cookie标头中的Path和Domain属性与创建Cookie时使用的值匹配时,服务器才能成功删除Cookie。

它也写在clearCookie的文档中:

仅当给定的选项与res.cookie()相同时,Web浏览器和其他兼容客户端才会清除cookie,但expires和maxAge除外。

因此,在您的情况下,请使用过去的cookieexpires来调用clearCookie命令,并使用与创建Cookie相同的参数。

答案 1 :(得分:0)

cookie 和 clearCookie 需要相同的参数。

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  @override
  void initState() {
    _showDocument();
    super.initState();
  }

  _showDocument() async {
    await ui.platformViewRegistry.registerViewFactory(
        'ExamplePage',
        (int viewId) => IFrameElement()
          ..src = 'https://example.com'
          ..style.border = 'none');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
      child: HtmlElementView(viewType: 'ExamplePage'),
    ));
  }
}