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

标签 javascript cookies jsonp

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

我可以从 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,并且不会对此发出警告或通知。它造成了一些令人头疼的问题。参见 herehere了解详情。

关于javascript - 我可以在 jsonp 请求的响应中设置 cookie 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757753/

相关文章:

javascript - 无法使用 Restangular 获取快速删除中的 json 请求?

javascript - 忘记 'var' 关键字时需要 jshint 错误

javascript - 使用 jQuery 添加、复制和删除元素

javascript - 使用 JSONP 的 AJAX 跨域数据

javascript - 任何人都可以使用 JavaScript 将文件上传到我的 Google Drive 公共(public)文件夹

c# - 如何获取 CookieContainer 中的 cookies 信息? (所有这些,不针对特定域)

cookies - 查找 Cookie 文件并使用记事本/其他编辑器编辑它们

php - 如何使用 PHP session 或 cookie 来实现这一点?

jquery .getJSON 输出所有数据.each

javascript - trim JSONP 日期以提取年份?