Stu*_*rtM 8 javascript cookies jquery setcookie cors
我们有以下配置:
testing.parentdomain.com
当您访问该域并创建一个购物篮时,我们会创建一个存储该购物篮价值的 cookie。cookie 域设置为.testing.parentdomain.com
,它是 Httponly 并且有一个路径/
我们有一个想要访问 cookie 的子域。subdomain.testing.parentdomain.com
此子域调用父域上的端点,例如:testing.parentdomain.com/basketData
。此调用是返回 JSON 的 GET 请求。
问题
问题是子域在发出请求时似乎没有发送 cookie 值,因此我们没有得到预期的响应。
尝试
查看其他问题,我们尝试过 CORS 和凭证更改。
作为附加说明,我们将以下 JS 与 webpack/babel 捆绑在一起。
我们的请求来自 AJAX,如下所示:
$.ajax({
url: url,
type: 'GET',
xhrFields: {
withCredentials: true
},
crossDomain: true
})
Run Code Online (Sandbox Code Playgroud)
服务器为子域和允许凭据设置了 CORS。在响应中,我们可以看到这些被返回。
access-control-allow-credentials: true
access-control-allow-origin:从上面的子域
是否有任何原因未将 cookie 与请求一起发送到父域?我们已经注销了服务器端响应中的 cookie,但它们并不像我们预期的那样存在。
:authority: testing.parentdomain.com
:method: GET
:path: /basket/data/
:scheme: https
accept: /
accept-encoding: gzip, deflate, br
accept-language: en-GB,en;q=0.9, en-US;q=0.8
来源:https
://subdomain.testing.parentdomain.com
引用:https ://subdomain.testing.parentdomain.com/
sec-fetch-dest:空
sec-fetch-mode:cors
sec- fetch-site: same-site
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
access-control-allow-credentials: true
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
access-control-allow-origin: https://subdomain.testing.parentdomain.com
cache-control :无缓存,无存储
内容长度:2238
内容类型:应用程序/json;字符集= UTF-8
日期:星期二,2020年11月3日20点39分36秒GMT
到期:-1
杂注:无缓存
服务器:Microsoft-IIS / 10.0
的Set-Cookie:AWSALB = N0bcThdgRFzrSfQVNIsffgsvY6T / y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di / Mqy1x + Ds8Ig1TumKkWnQiFvIkoELI / rEYYgyUxbEtUI4; 到期日 = 2020 年 11 月 10 日星期二 20:39:36 GMT;路径=/
设置 cookie:AWSALBCORS=N0bcThdgRFzrSfQVNIsffgsvY6T/y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di/Mqy1x+Ds8Ig1TumKkWnQiFvExE; 到期日 = 2020 年 11 月 10 日星期二 20:39:36 GMT;路径=/;SameSite=无;安全
状态:
200strict-transport-security:max-age=31536000;
变化:Origin
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-robots-tag: noindex
x-ua-compatible: IE=edge
x-xss-protection: 1; 模式=块
即使您从子域调用主域,这也被视为跨域请求。
来自RFC 6454 的引用,它限定了“起源”术语:
问:为什么要使用完全限定的主机名而不仅仅是“顶级
”域?A:虽然DNS有层级委托,但
主机名之间的信任关系因部署而异。例如,在许多教育机构中,学生可以在
https://example.edu/~student/ 上托管内容,但这并不意味着
学生创作的文档应该属于同一来源(即,
具有相同的保护)域)作为用于管理托管在https://grades.example.edu/ 上的成绩的 Web 应用程序。
所以你所做的所有事情确实需要让它工作:
access-control-allow-credentials: true
access-control-allow-origin: subdomain.testing.parentdomain.com
(不是通配符)withCredentials: true
在请求中的SameSite=None
,因为从一个子域到相同域的子域的另一个的请求被认为是“同位点”(饼干属性没有在这种情况下所需的源)。
所以只需检查一切是否正确设置,它应该可以正常工作。
在你的问题开始时你说:
cookie 域设置为
.testing.parentdomain.com
但在记录的服务器响应中:
set-cookie: AWSALBCORS=N0bcThdgRFzrSfQVNIsffgsvY6T/y2Bp47RZJCueeSLOS7eEjo0AThiElXmww6fy2eynRyyt8gAB8di/Mqy1x+Ds8Ig1TumKkWnQiFvIkoELI/rEYYgyUxbEtUI4; Expires=Tue, 10 Nov 2020 20:39:36 GMT; Path=/; SameSite=None; Secure
Run Code Online (Sandbox Code Playgroud)
该Domain=.testing.parentdomain.com;
参数显然丢失了。
我不知道您使用哪种编程语言来设置 cookie,但我强烈建议您检查服务器响应中用于设置 cookie 的调用。
归档时间: |
|
查看次数: |
1075 次 |
最近记录: |