在跨域ajax请求之后保留cookie

Atn*_*nNn 15 javascript php ajax jquery

运行的javascript应用程序10.0.0.1尝试使用跨域ajax调用对其用户进行身份验证.

请求如下:

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

服务器的第一个响应尝试设置cookie:

Access-control-allow-origin:http://10.0.0.1
Set-Cookie:PHPSESSID=uuj599r4k1ohp48f1poobil665; expires=Sat, 28-Jan-2012 17:10:40 GMT; path=/
Run Code Online (Sandbox Code Playgroud)

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

我不是想为另一个域读取cookie,我只是希望其他域上的应用程序能够设置和读取自己的cookie.

这可能吗?

我在Chrome和Firefox 9中测试过.

小智 11

服务器应该设置标头:

response.Headers.Add("Access-Control-Allow-Credentials", "true");
Run Code Online (Sandbox Code Playgroud)

客户端设置为:

xhrFields: {
  withCredentials: true
}
Run Code Online (Sandbox Code Playgroud)


Deb*_*dez 10

只要您使用支持CORS的浏览器,AJAX请求上的cookie就可以运行.但你必须设置withCredentialsXMLHttpRequest为true.

请参阅:withCredentials属性

我不使用JQuery,但这是一个专门处理withCredentials通过JQuery 设置的问题.

使用跨域帖子发送凭据?


Dar*_*rov 2

不可以,cookie 不能跨域共享。如果浏览器支持,则可以使用标头来规避 AJAX 调用的同源策略Access-Control-*但对于 cookie 则没有办法。