2011-12-02 121 views
17

我正在使用$ getJSON在Phonegap和Android下创建一个node.js端点。代码看起来像这样如何在Phonegap和Android 3.2下启用第三方Cookie?

$.getJSON(
    serverURL + "/login?callback=?", 
    "playerId=" + playerId + "&pwd=" + pwd, 
    function(data){ 
     theCallbackFunction.call(null, JSON.parse(data)); 
    }, 
    function(jqXHR, textStatus, errorThrown) { 
      alert('error ' + textStatus + " " + errorThrown); 
    } 
); 

为了响应登录请求,我的服务器发送回一个会话cookie。如果在浏览器中启用了“第三方Cookie”,则此Cookie只会在随后的AJAX请求中被接受和返回。我发现较老的Android设备(例如2.2)默认允许这种设置,但新设备(3.2)不允许。

是否可以强制Phonegap为我的Android应用程序启用第三方Cookie?

+0

我不认为PhoneGap支持cookies。 http://stackoverflow.com/questions/3709315/phonegap-cookie-based-authentication-php-not-working-webview http://stackoverflow.com/questions/6968209/phonegap-javascript-app-how-can-我店饼干 – Luka

回答

0

Phonegap不支持cookie抽象。从来没有真正需要,因为已经有应用程序/插件。此外,它打算包括电话/设备的功能,而不是浏览器。但是,您可以使用jQuery插件来做到这一点。

https://github.com/carhartl/jquery-cookie

1

我想用我的服务器进行身份验证时,也有类似的问题。我反而诉诸使用localStorage。请参阅下面的代码或here

var store = window.localStorage, 
request = { 
    url: {SERVER_URL}, 
    headers : { 
     Cookie: store.getItem('session') 
    }, 
    complete: function (jqXHR, status){ 
     if (status != 'success') { 
      console.log('ajax status: failure'); 
     } else if (store.getItem('session') != null) { 
      console.log('ajax status: session exists'); 
     } else { 
      console.log('ajax status: saving cookie'); 
      var header = jqXHR.getAllResponseHeaders(); 
      var match = header.match(/(Set-Cookie|set-cookie): (.+?);/); 
      if (match) { 
       session = match[2]; 
       store.setItem("session", session); 
      } 
     } 
    } 
} 
$.ajax(request); 

在上面,我正在检查localStorage变量'会话',如果它存在,它会发送存储的cookie。如果它不存在,它将采用服务器在头部发送的'set-cookie'参数,匹配相关部分并将其存储在localStorage的'session'变量中。