2012-05-25 75 views
1

为了更好地说明我的问题,问题可能是:我可以在来自jsonp请求的响应中设置cookie吗?

我可以从JSONP请求发起会话吗?

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

编辑:这是我做的,通过加载本地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。自chrome报告以来,这一点已得到证实。 问题是,如果我再次重新执行上述操作,则先前设置的cookie不会被发送回服务器。编辑2:我去了Chrome浏览器(在引擎盖下的页面),我找不到cookie,虽然它被报告(调试控制台的铬)在JSONP响应收到。这意味着服务器发送它,浏览器看到它,然后抛弃它。

回答

3

我找到了解决办法,这里是一些信息,可能是任何人处理这个问题有意思:

维基百科的定义:

第三方Cookie是cookies被设置不同域名显示在地址栏上

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

只要我启用了第三方cookie,它就可以工作。作为便笺,默认情况下Chrome不支持文件中的cookie://页面和doean不会警告或通知此设置。它造成了一些麻烦。详见herehere

+0

我在移动Safari中遇到了这个问题。去偏好设置'接受Cookies'为'总是'解决了它。 – schellsan

1

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

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

+0

我做了一个JSONP请求,服务器在响应中设置了cookie,然后我转到另一个浏览器窗口并直接转到地址,并且服务器没有获取cookie。我使用chrome,并且看到服务器在JSONP响应中设置的cookie,但是cookie不会从第二个直接请求发送到服务器。第一个请求(JSONP)使用最新的jquery .ajax funcall完成。第二个只是在浏览器窗口中输入。也许我没有看到什么。 – Paralife

+0

如果它是JSONP,它被包含为一个JS文件,对吧? (不是XHR?)所以你可以检查请求和响应头。这个对我有用。页面A发送JS(ONP)请求给脚本B,脚本B以JSONP + Set-cookie响应,如果我重新加载页面A,cookie发送到服务器。这就是Cookie(应该)的工作方式......检查响应以查看cookie是否实际设置。从新会话开始(使用隐身模式)。 – Rudie

+0

实际上,它是一个名为test.html的本地文件,它只包含头标记(和最新的jquery)中的test.js脚本。在这个test.js文件中,我有一个函数向我的远程服务器发出一个JSONP请求。我可以在Chrome控制台中看到响应cookie。但如果我再次提出请求,则不会发送。 – Paralife

相关问题