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