Cookie未保存在Sencha Touch 2中

时间:2013-01-10 11:42:49

标签: ajax cookies sencha-touch-2 setcookie

我有一个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信息发送回服务器。

2 个答案:

答案 0 :(得分:2)

试试这个:

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

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

在Ajax请求中添加withCredentials: true

答案 1 :(得分:2)

对于带有ExtJS请求的IIS WCF,将此应用于web.config(例如,对于本地主机应用程序,例如通过SenchaTouch打包程序或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使用cookies。