2010-09-14 30 views
27

我正在使用sencha touch,HTML5和phonegap作爲包裝的移動web應用程序。phonegap:基於cookie的身份驗證(PHP)不工作[webview]

我正在使用PHP身份驗證(Cookie)和ajax請求。一切工作在Safari或Chrome罰款,但與PhoneGap的(web視圖)的部署但這並沒有工作了...

任何幫助,將不勝感激:)

更多的細節後:

所有我的應用程序的數據通過ajax請求加載到我的服務器組件「mobile.php」。 我使用基本的PHP-AUTH以autenticate用戶:

  1. AJAX請求[用戶名,密碼] - > mobile.php - >會話建立(餅乾),如果
  2. 所有其他請求身份驗證是成功的

一個普通的safari網站和webview有什麼區別?

回答

27

我想通了:

你必須改變phonegap_delegate.m文件,並添加以下init方法:


- (id) init 
{ 
    /** If you need to do any extra app-specific initialization, you can do it here 
    * -jm 
    **/ 
    //special setting to accept cookies via ajax-request 
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage 
              sharedHTTPCookieStorage]; 
    [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

    return [super init]; 
} 

它使網頁流量從Ajax請求接受cookies

+0

非常感謝。我試圖從最近2個小時開始調試這個問題。 – 2010-10-14 22:04:15

+0

我剛剛燒了整整一天。你的帖子救了我。謝謝!!! – 2010-10-22 15:02:22

+0

謝謝你,對我也有效。但是你能修補你的代碼的格式嗎?使用「1010101」圖標將代碼表示爲代碼。 – John 2010-11-14 18:19:29

2

如果你的Phonegap AJAX請求不是像他們應該的那樣發射回調,這可能是原因。

如果您收到的響應嘗試設置cookie並且您沒有完成Michael的修復,那麼您的(jQuery)AJAX請求將悄然失敗 - 既不成功也不會錯誤:儘管服務器實際上收到了請求併發送了回覆。即使你不關心cookie,你也必須這樣做。

我希望這可以幫助別人。

我不在乎cookies,但花了幾個小時試圖弄清楚爲什麼回調沒有觸發!

+0

重點:回調。 +1 – 2011-08-12 19:17:38

-6

最好的方法來存儲得到,在我的應用程序,它是活

儲存價值中的cookie刪除的cookie其做工精細

window.localStorage.setItem("key", "value"); 

要餅乾

var value = window.localStorage.getItem("key"); 

獲取價值刪除cookie值

window.localStorage.removeItem("key"); 
window.localStorage.clear(); 
+6

爲了澄清,localStorage與Cookie無關。這只是一種在現代瀏覽器上存儲字符串的機制。它確實可以作爲cookies的一個很好的替代品,但它肯定不是一個cookie本身。 – sic1 2012-05-14 19:10:16

0

有太Android上工作的解決方案:

安裝插件https://github.com/wymsee/cordova-HTTP執行任意HTTP(S)請求。

替換XMLHttpRequest與插件替代(cordovaHTTP.getcordovaHTTP.post):

cordovaHTTP.post("https://example.com/login", {email: '[email protected]', passwd: "s3cr3t"}, {}, function(response) { 
    console.log('success'); 
    console.log(response); 
}, function(response) { 
    console.log('failure'); 
    console.log(response); 
}); 

的響應將包含狀態,數據和response.headers["Set-Cookie"],可被解析爲名稱,值,域路徑甚至僅Http標誌; - )

所述cookie可以被保存在LocalStorage和在隨後的請求(見cordovaHTTP.setHeader().get/.post方法header參數)發送到模擬在廣告已認證的用戶esktop瀏覽器。