我可以在jsonp请求的响应中设置cookie吗?

时间:2012-05-25 16:01:54

标签: javascript cookies jsonp

为了更好地说明我的问题,问题可能是:

我可以从JSONP请求启动会话吗?

更详细:假设从我的浏览器向myserver.com发出JSONP请求。 myserver.com可以通过JSONP响应设置cookie,以便稍后,当再次向myserver.com发出请求时(直接在doc.host = myserver.com时或通过来自任意doc.host的另一个JSONP请求间接请求)饼干将被发送给它?目前浏览器似乎忽略了我用JSONP响应发送的cookie。 我想要的是什么?我在这里错过了什么?

编辑:这是我的请求,通过一个虚拟本地html加载一个本地js文件,只需获取最新的jquery并加载js文件:

$.ajax({
  url: "http://my-remote-server/jsonp/service/test",
  dataType: 'jsonp',
  data: {some:'data'},
  success:   function(responseData)
            {console.log(responseData);}
    });

上述JSONP请求的响应是设置cookie。自Chrome报告以来,这已得到确认。 问题是,如果我再次重新执行上述操作,则先前设置的cookie不会被发送回服务器。

编辑2:我去了Chrome Cookie浏览器(在引擎盖下的页面中)并且我无法找到cookie,尽管在JSONP响应中收到了报告(chr​​ome的调试控制台)。这意味着服务器发送它,浏览器看到它然后扔掉它。

2 个答案:

答案 0 :(得分:3)

我找到了解决方案,以下是处理此问题的任何人可能感兴趣的一些信息:

来自维基百科的定义:

  

第三方Cookie是使用地址栏中显示的不同域名设置的Cookie

如果我没有错,这将占所有JSONP设置cookie,第三方cookie的99.99%。在我的情况下,地址栏上显示的地址是 file:// ,这使我的cookie成为第三方。

只要我启用第三方Cookie,它就能正常运行。

作为旁注,Chrome默认情况下不支持file://页面上的Cookie,并且doean不会发出警告或通知此情况。它带来了一些令人头疼的问题。请参阅herehere了解详细信息。

答案 1 :(得分:1)

是。动态图像请求和CSS请求等也是如此。如果它是XHR请求,您甚至可以读取响应头(Set-Cookie等)。

现在如何忽略Cookie?你怎么知道?