2011-12-02 58 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'變量中。