Cookie损坏与多个createHTTPClient Titanium调用

时间:2013-01-03 15:18:44

标签: android google-app-engine cookies titanium appcelerator

在Appcelerator的Titanium中创建一个涉及webView和后台调用的Android应用程序时,我遇到了一个问题/错误,其中cookie在多个createHTTPClient调用中被破坏。

Cookie最初是从webView获得的:

var webview = Ti.UI.createWebView();
webview.url = 'http://www.example.com';
window.add(webview);
webview.addEventListener('load', function(e) {
    cookies = e.source.evalJS("document.cookie");
    Titanium.App.Properties.setString('cookies',cookies);
}
window.open({modal:true});

然后用于后台调用:

var loader = Titanium.Network.createHTTPClient();  
loader.open("GET",base_url + url); 
loader.onload = function() {
    // process response
}
loader.setRequestHeader('Cookie',Titanium.App.Properties.getString("cookies"));
loader.send(); 

第一次调用上面的createHTTPClient代码块时,一切正常,但后续运行上述代码会发送损坏的cookie。在Google App Engine(gae)中,打印出请求标题看起来像这样(已损坏):

logging.info('Request:\n%s' % self.request)

损坏的响应(仅显示请求标头的cookie部分)

Cookie: auth="eyJfdXNlciI6WzYsMSwiVmRoZEtnYWZRMnNxazFjaVM0U1lKdCIsMTM1NzIyMzcwOSwxMzU3MjIzNzA5XX0\075|1357223709|4f622167f477a8c82cab196af4b0029af1a966d7", auth=eyJfdXNlciI6WzYsMSwiVmRoZEtnYWZRMnNxazFjaVM0U1lKdCIsMTM1NzIyMzcwOSwxMzU3MjIzNzA5XX0\075|1357225569|7a469fab7a38a437649c25620729e07c4607f617 Cookie2: $Version=1

工作回复

Cookie: auth="eyJfdXNlciI6WzYsMSwiVmRoZEtnYWZRMnNxazFjaVM0U1lKdCIsMTM1NzIyMzcwOSwxMzU3MjIzNzA5XX0\075|1357223709|4f622167f477a8c82cab196af4b0029af1a966d7"     ...

我怀疑这个问题与unicode字符或createHTTPClient内的某些内容有关。损坏的cookie中显示了两个auth=语句。

总之,当应用首次启动时,后台Titanium.Network.createHTTPClient调用有效,之后的任何调用都会发送损坏的Cookie。

1 个答案:

答案 0 :(得分:1)

HTTPClient documentation说“对象打算用于单个请求”,所以我假设一切都会在多次调用后重置。但在第一次电话会议后,情况有所不同。

在设置Cookie之前将loader.clearCookies(base_url);添加到代码中似乎可以解决问题。

var loader = Titanium.Network.createHTTPClient();  
loader.open("GET",base_url + url); 
loader.onload = function() {
    // process response
}
loader.clearCookies(base_url); // THE FIX.
loader.setRequestHeader('Cookie',Titanium.App.Properties.getString("cookies"));
loader.send();