未发送Javascript跨域Cookie Websocket

问题描述

我正在通过document.cookie = 'foo=bar;secure;path=/;'设置cookie,并且正在连接到WebSocket。我已经尝试了samesite = None和许多其他变体,但都没有成功,因此我有些困惑。我想使用此Cookie进行身份验证(实际上是一个jwt和一对特定的api密钥)。

流为:

  • 打开前端应用程序
  • 登录,找回jwt
  • 将JWT和特殊API密钥存储在令牌中
  • 发出Websocket请求
  • 如果使用Cookie制作-一切正常

当前端应用程序和后端应用程序都在本地主机上时,这在本地可用。

在生产中同时部署了两个应用程序时,前端应用程序无法发送cookie。它们都托管在heroku上,并分别指向x.mysite.com和y.mysite.com子域。

我需要了解特定的浏览器行为吗?

谢谢。

解决方法

由于CSRF attacks,浏览器不允许将Cookie从一个域访问到另一个域中的应用程序。默认情况下,即使是同一域的子域也是不允许的。要启用跨域共享的Cookie,您必须按照this answer中的说明进行指定。 这意味着,如果您希望mysite.com,x.mysite.com和y.mysite.com访问相同的cookie,则必须通过以下方式设置cookie:

{
  "targets": [
    {
      "target_name": "addon","sources": [
        "addon.mm",],"xcode_settings": {
        "OTHER_CFLAGS": [
          "-ObjC++",},"link_settings": {
        "libraries": [
          "-framework Foundation","-framework AVFoundation",}

在Django中,您可以使用Set-Cookie: name=value; domain=mysite.com 设置来实现。因此,在您的设置文件中,您可以:

SESSION_COOKIE_DOMAIN