2

我有一个 Web 服务“someWebServiceOnServer”,它发回一个 json 响应和一个 Cookie。如果我通过浏览器点击此 URL,我会看到以下内容:

{"IsAuth":true,"Message":"","UserName":"guest"}

如果我检查页面资源 - > Cookies,我会看到一个 Cookie 集。

现在在我的 Sencha Touch 2 应用程序中,我正在进行 ajax 调用,如下所示:

Ext.Ajax.request({
url: 'someWebServiceOnServer',
useDefaultXhrHeader: false,
callback: function(options, success, response) {
console.log(response.responseText)
},
});

在运行它时,我得到了预期的 JSON 响应。但是cookie没有设置。我也无法在响应标头中找到 cookie。为什么会这样?

注意:服务器上已经实现了CORS,我的应用程序可以访问该服务。我没有使用过withCredentials: true,,因为这会引发错误XMLHttpRequest cannot load . Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.

我的浏览器已经启用了 Cookie。

我需要 cookie,因为我将进行后续调用,将这个 cookie 信息发送回服务器。

4

2 回答 2

2

试试这个:

将以下标头添加到服务器响应中。

Access-Control-Allow-Origin: http://clientdomain.com
Access-Control-Allow-Credentials: true

并添加withCredentials: trueAjax 请求。

于 2013-01-10T16:48:21.503 回答
2

对于带有 ExtJS 请求的 IIS WCF,将其应用于 web.config(例如,对于 localhost,因此本地托管的应用程序,例如通过 SenchaTouch packagedr 或 PhoneGap):

<system.webServer>
          <httpProtocol>
            <customHeaders>
              <add name="Access-Control-Allow-Origin" value="http://localhost" />
              <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
              <add name="Access-Control-Allow-Credentials" value="true" />
            </customHeaders>
          </httpProtocol>
        </system.webServer> 

在 Ext.JS 请求中使用这些参数:

disableCaching: true,
useDefaultXhrHeader: false,
withCredentials: true

这反过来又强制 Ext.ajax.request 使用 cookie。

于 2013-04-11T10:49:16.123 回答