【问题标题】:Setting and getting a cookie back from a javascript tag request从 javascript 标记请求中设置和获取 cookie
【发布时间】:2021-02-09 22:05:41
【问题描述】:

我有以下情况:

  1. 在 another_domain.com 页面中带有 src=domain1.com 的 Javascript 标记
  2. Javascript 标记从 domain1.com 服务器返回 cookie 标头和脚本内容
  3. 脚本内容收集数据并通过请求将其发送到 domain1.com

我希望能够在第 2 点设置 cookie 并在第 3 点恢复它。我已经能够通过返回这样的 Set-Cookie 标头来设置 cookie:

set-cookie: cookieName="cookieValue";Version=1;Domain=domain1.com;Path=/;SameSite=None;Max-Age=600;安全

但我无法在第 3 点的请求中恢复它,因为 cookie 没有随请求一起发送。

所以,现在有两个问题:

  1. 我需要在第二个请求中手动发送 cookie 吗?在进行重定向测试时,cookie 标头“自动附加”到第二个请求,我能够恢复它,但是来自 javascript 标记的请求不会发生这种情况。

  2. 我只能在 https(安全 cookie)和脚本中使用 SameSite=None 设置 cookie?在不使用 Secure 和 SameSite=None 或在 http 环境中尝试时,未设置 cookie,并且开发者控制台抛出了跨站点错误。

感谢阅读。

【问题讨论】:

    标签: javascript cookies


    【解决方案1】:

    这里有几件事情需要考虑。首先我们要注意,我们正面临一个跨域通信的案例。

    如果需要在步骤3中发送步骤2中服务器设置的Cookie,则必须在发出请求时显式配置。如果您使用 XMLHTTPRequest,则必须将 withCredentials 设置为 true,here is the docs。 如果您正在使用 fetch,请查看 Request credentials

    由于它是跨域通信,因此请确保您的 CORS 标头已正确配置。当请求凭证模式为“包含”时,您需要将Access-Control-Allow-Origin 标头设置为有效的而不是通配符"*"。您还需要Access-Control-Allow-Credentialstrue,检查它here

    使用此配置,cookie 将在第三步中“自动附加”(根据您的话)。出于安全原因,您不能通过 JS 在跨域设置上设置 cookie,请参阅this response

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多