2010-09-14 11 views
27

Sto lavorando su un'app Web mobile utilizzando sencha touch, HTML5 e PhoneGap come wrapper.phonegap: autenticazione basata su cookie (PHP) non funzionante [webview]

Utilizzo le autenticazioni PHP (Cookie) e ajax-request. Tutto funziona bene su Safari e Chrome, ma dopo la distribuzione con PhoneGap (WebView) che does't funziona più ...

Qualsiasi aiuto sarebbe apprezzato :)

Alcuni dettagli:

Tutti i dati per la mia app vengono caricati tramite richieste Ajax sul mio componente server "mobile.php". Io uso di base PHP-Auth per autenticarsi l'utente:

  1. AJAX-Richiesta [nome utente, password] -> mobile.php -> sessione stabilita (cookie)
  2. Tutte le altre richieste se autenticazione ha avuto successo

Qual è la differenza tra un normale sito Web di safari e la visualizzazione Web?

risposta

27

ho capito:

è necessario modificare il file phonegap_delegate.m e aggiungere il seguente al metodo 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]; 
} 

permette WebView per accettare i cookie da richieste Ajax

+0

Grazie mille. Stavo cercando di eseguire il debug di questo problema dalle ultime 2 ore. –

+0

Ho appena bruciato un'intera giornata. Il tuo post mi ha salvato Grazie!!! –

+0

grazie, anche per me ha funzionato. Ma puoi aggiustare la formattazione del tuo codice? Utilizzare l'icona "1010101" per indicare il codice come codice. – John

2

Se le richieste Phonegap AJAX non attivano i callback come dovrebbero, questa potrebbe essere la ragione.

Se la risposta che stai ricevendo i tentativi di impostare i cookie e non avete fatto correzione di Michael allora la vostra richiesta (jQuery) AJAX non riuscirà tranquillamente - né il successo: né errore: callback scatterà nonostante il fatto che il server effettivamente ricevuto la richiesta e inviato una risposta. Sembra che tu debba farlo anche se non ti importa dei cookie.

Spero che questo aiuti qualcuno.

Non mi sono preoccupato dei cookie, ma ho passato solo qualche ora a cercare di capire perché i callback non hanno sparato!

+0

Buon punto: callbacks. +1 –

-6

Modi migliori per memorizzare ottenere e cancellare cookie di relativo funzionamento benissimo nella mia app che si trova sul vivo

per memorizzare il valore nel cookie di

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

per ottenere il valore in biscotto

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

Per eliminare il valore del cookie

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

Per chiarire, localStorage non ha nulla a che fare con i cookie. È semplicemente un meccanismo per memorizzare le stringhe sui browser moderni. Funziona come un grande alterativo per i cookie, ma di sicuro non è un cookie stesso. – sic1

0

C'è una soluzione che funziona anche su Android:

Installa il plug-in https://github.com/wymsee/cordova-HTTP per eseguire richieste HTTP (S) arbitrarie.

Sostituire XMLHttpRequest con l'alternativa plug-in (cordovaHTTP.get o cordovaHTTP.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); 
}); 

La risposta conterrà stato, dati e response.headers["Set-Cookie"], che può essere analizzato per il nome, valore, dominio, il percorso e anche HttpOnly bandiere; -)

Tale cookie può essere salvato in LocalStorage e mette in richieste successive (vedi cordovaHTTP.setHeader() o header parametro di .get/.post metodi) per simulare un utente autenticato sulla annuncio browser esktop.

Problemi correlati