为了更好地说明我的问题,问题可以是:
我可以从 JSONP 请求发起 session 吗?
更详细地说:假设从我的浏览器向 myserver.com 发出了一个 JSONP 请求。 myserver.com 能否通过 JSONP 响应设置 cookie,以便稍后在再次向 myserver.com 发出请求时(直接在 doc.host = myserver.com 时或通过来自任意 doc.host 的另一个 JSONP 请求间接发出)那些cookies会被发送吗?目前浏览器似乎忽略了我用 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 响应中收到(chrome 的调试控制台)。这意味着服务器发送它,浏览器看到它然后将其丢弃。
最佳答案
我找到了解决方案,以下是处理此问题的任何人可能感兴趣的一些信息:
来自维基百科的定义:
Third-party cookies are cookies being set with different domains from the one shown on the address bar
如果我没记错的话,这使得 99.99% 的 JSONP 设置 cookie,第三方 cookie。在我的例子中,地址栏上显示的地址是 file:// ,这使我的 cookie 成为第三方 cookie。
一旦我启用了第三方 cookie,它就起作用了。
作为旁注,默认情况下,Chrome 不支持 file://页面上的 cookie,并且不会对此发出警告或通知。它造成了一些令人头疼的问题。参见 here和 here了解详情。
关于javascript - 我可以在 jsonp 请求的响应中设置 cookie 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757753/