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

Can I set cookies in a response from a jsonp request?

本文关键字:设置 cookie 响应 jsonp 请求 我可以      更新时间:2023-09-26

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

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

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

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

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

上述 JSONP 请求的响应是设置 cookie。这是确认的,因为铬报告了它。问题是,如果我只是第二次重新执行上述操作,则先前设置的cookie不会发送回服务器。

编辑2:我去了Chrome cookie浏览器(在引擎盖下页面中),我找不到cookie,尽管它在JSONP响应中被报告(chrome的调试控制台)。这意味着服务器发送它,浏览器看到它,然后将其丢弃。

我找到了解决方案,这里有一些信息可能对处理此问题的任何人来说都很有趣:

根据维基百科的定义:

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

如果我没记错的话,这使得99.99%的JSONP设置cookie,第三方cookie。就我而言,地址栏上显示的地址是一个 file://,这使我的cookie成为第三方cookie。

一旦我启用了第三方cookie,它就可以工作了。

作为旁注,Chrome 默认不支持 file://页面上的 cookie,并且 doean 不会警告或通知这一点。它造成了一些头痛。有关详细信息,请参阅此处和此处。

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

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