在跨域 ajax 请求后保留 Cookie

2022-08-30 23:27:14

上运行的 javascript 应用程序尝试使用跨域 ajax 调用来验证其用户。10.0.0.1

请求如下所示:

function test(again){
  $.ajax({
    type: 'GET',
    url: 'http://example.com/userinfo',
    dataType: 'json',
    success: function(userinfo){
      if(again)
        test(false);}});}
test(true);

来自服务器的第一个响应尝试设置 Cookie:

Access-control-allow-origin:http://10.0.0.1
Set-Cookie:PHPSESSID=uuj599r4k1ohp48f1poobil665; expires=Sat, 28-Jan-2012 17:10:40 GMT; path=/

但是第二个请求不包括此 cookie,也没有对该域的任何其他 ajax 请求。

我不是在尝试读取另一个域的 cookie,我只是希望另一个域上的应用程序能够设置和读取自己的 cookie。

这可能吗?

我已经在Chrome和Firefox 9中进行了测试。


答案 1

服务器应设置标头:

response.Headers.Add("Access-Control-Allow-Credentials", "true");

客户端设置为:

xhrFields: {
  withCredentials: true
}

答案 2

只要您使用的浏览器支持 CORS,AJAX 请求上的 Cookie 就应该有效。但你必须设定为真。withCredentialsXMLHttpRequest

请参见: 与凭据属性

我不使用JQuery,但这里有一个问题专门处理通过JQuery进行设置的问题。withCredentials

通过跨域帖子发送凭据?