gpt4 book ai didi

cookies - 从 ajax 请求在子域上设置 cookie

转载 作者:行者123 更新时间:2023-12-03 15:11:55 25 4
gpt4 key购买 nike

我在 www.example.com 上有一个 webapp,在 api.example.com 上有一个 API。

Web 应用程序对 API 进行 ajax 调用。

我需要在 api.example.com 上放一个 cookie 来跟踪 session 。

为了跟踪我的问题,我在 webapp 和 api 的两个子域上都设置了测试 cookie。
Web 应用程序在 .exemple.com 上设置了一个 cookie,而 api 在 .exemple.com 上设置了一个 cookie,在 api.exemple.com 上设置了另一个。
Cookie 仅使用 Domain=.exemple.com 设置。没有路径,没有 HTTPOnly。

注意:最后我只需要 api.exemple.com 上的一个。但论文是为了测试。

使用我的浏览器 (Firefox 16) 直接查询工作正常。
在api上查询:设置并发送了两个cookie。
在 www 上查询:设置了 cookie,同时发送了来自 api 的两个。 (当然,前提是我在 api 之后查询 www)。

现在,我清理浏览器 cookie 并仅查询 www。
查询 www: 工作正常,和以前一样。
api 上的子查询,来自 www 的 ajax 请求:不发送 cookie。 Set-Cookies 什么都不做。使用 Firebug,我在响应中看到了 cookie。但是在后续请求或页面信息中没有它们的踪迹。

我试图在 Firefox 上启用 cookie 日志。绝对没有来自 api 的 cookie 痕迹,甚至没有拒绝通知。

最后,我只需要一种在 api 上存储一个 cookie 的方法。为此,我非常开放:)

信息:
两台服务器都是NodeJS。
我尝试在服务器端(Set-Cookie header )和客户端(document.cookies)手动使用 firebug 设置 cookie。

我检查过的其他帖子没有解决方案(还有许多其他我不记得的帖子):

setting cross-subdomain cookie with javascript

Cookies and subdomains

Can subdomain.example.com set a cookie that can be read by example.com?

最佳答案

在 api 上设置允许凭据 header

Access-Control-Allow-Credentials: true

使用 withCredentials对于请求
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});

否则 XMLHttpRequest不是 发送 cookie,不管 Access-Control-Allow-Credentials标题。

删除 Access-Control-Allow-Origin 上的通配符
Access-Control-Allow-Origin: http://www.example.com

通配符 *不管用。如果 withCredentials,浏览器将丢弃响应被设置。

引用:

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

https://developer.mozilla.org/en-US/docs/HTTP_access_control

http://arunranga.com/examples/access-control/credentialedRequest.html

http://api.jquery.com/jQuery.ajax/

关于cookies - 从 ajax 请求在子域上设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13002038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com