因此,我在向服务发送带有跨域请求的Cookie时遇到问题。我已经让它在我们的CI环境中工作,但不是在本地。基本上,我在api.service.com
有一个API,它可以通过AJAX调用从webapp.service.com
的客户端访问。 API通过.service.com
为set-cookie
设置了Cookie。然后,对API的所有后续调用都应包含此cookie。从webapp.service.com
运行时,这可以按预期工作。这将在prod工作正常。 然而,出于显而易见的原因,我希望能够在本地开发webapp,并从本地文件或api.service.com
服务对localhost
运行API调用。< / p>
据我所知,Chrome在保存本地文件的Cookie方面有点不确定,但我已经解决了这个问题,并不是问题所在。实际上,cookie是节省的。它只是不发送带有后续API调用的cookie。这是我正在进行的工作流程(带有一些通用/审查的产品名称):
AJAX调用POSTS到我们的API:
$.ajax({
method: "POST",
crossDomain: true,
xhrFields: {
withCredentials: true,
},
url: 'https://api.service.com/login',
data: data,
contentType:"text/plain",
dataType: "json",
success: function(data){
...
}
});
CORS内容设置为允许凭据和来源(允许的来源动态更新,不使用*
。所以我们收回此cookie:cookie:service-token=7f7d251ebeec37f7c0815....; SameSite=lax;Max-Age=2629744; domain=.service.com; path=/;
它在Chrome中显示如下:
我知道这实际上可以保存cookie。但是,也许不是我想要的。我进入了Chrome的Cookie,它正常更新,如下所示:
我看到的问题是&#34;发送给&#34;值是&#34;仅限同一站点连接&#34;。我不知道如何最初设置Chrome以将其视为&#34;任何类型的连接。&#34;我认为这就是当我发送另一个AJAX调用时,该cookie未包含在请求中的原因。
我已经看到其他类似帖子通过向AJAX调用添加crossDomain
和/或withCredentials
来解决。这对我没有解决。这是对API的后续调用:
$.ajax({
url: 'https://api.service.com/getTheThing',
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function(data){...}
});
此请求中不包含cookie,因此失败。
答案 0 :(得分:1)
事实证明,设置SameSite=lax
正好与我的想法相反。删除它解决了这个问题。