2010-09-14 6 views
27

Pracuję nad aplikacją mobilną za pomocą czatu sencha touch, HTML5 i phonegap.phonegap: uwierzytelnianie oparte na plikach cookie (PHP) nie działa [przeglądarka internetowa]

Używam Uwierzytelnianie PHP (Cookie) i żądania ajax. Wszystko działa poprawnie na safari lub chrom, ale po wdrożeniu z PhoneGap (WebView) to nie podlega już pracować ...

Każda pomoc będzie mile widziane :)

trochę więcej szczegółów:

Wszystkie dane dla mojej aplikacji są ładowane za pośrednictwem żądań ajax do mojego komponentu serwera "mobile.php". Używam podstawowy PHP-Auth do autenticate użytkownika:

  1. AJAX-Request [nazwa użytkownika, hasło] -> mobile.php -> Sesja powstała (cookie)
  2. Wszelkie inne wnioski jeśli auth powiodła

Jaka jest różnica między normalną stroną safari a widokiem na WWW?

Odpowiedz

27

I zdobione:

trzeba zmienić plik phonegap_delegate.m i dodaj następujące metody 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]; 
} 

to umożliwia WebView akceptować ciasteczka z Ajax żądań

+0

Wielkie dzięki. Próbowałem debugować ten problem od ostatnich 2 godzin. –

+0

Właśnie spaliłem cały dzień. Twój wpis mnie uratował. Dziękuję Ci!!! –

+0

dziękuję, to działało również dla mnie. Ale czy możesz ufać formatowaniu swojego kodu? Użyj ikony "1010101", aby oznaczać kod jako kod. – John

2

Jeśli twoje żądania AJAX firmy Phonegap nie wywołują wywołań zwrotnych takich, jak powinny, może to być przyczyną.

Jeśli odpowiedź, którą próbujesz ustawić ciasteczka, a nie zrobiłeś poprawki Michaela, twoja prośba (jquery) AJAX nie powiedzie się po cichu - ani sukces: ani błąd: wywołania zwrotne nie będą działały pomimo tego, że serwer faktycznie otrzymał wniosek i wysłał odpowiedź. Wygląda na to, że musisz to zrobić, nawet jeśli nie obchodzi cię ciasteczka.

Mam nadzieję, że to pomoże komuś.

Nie obchodziły mnie pliki cookie, ale spędziłem kilka godzin próbując dowiedzieć się, dlaczego wywołania zwrotne nie uruchomiły się!

+0

Dobra uwaga: callbacks. +1 –

-6

Najlepsze sposoby, aby zapisać się i usunąć ciasteczka jego pracy grzywny w moim app, który jest na żywo

do przechowywania wartości w pliku cookie

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

uzyskać wartość w pliku cookie

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

Aby usunąć wartość pliku cookie:

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

Aby wyjaśnić, localStorage nie ma nic wspólnego z plikami cookie. Jest to po prostu mechanizm do przechowywania ciągów w nowoczesnych przeglądarkach. Działa to jako świetna alternatywa dla ciasteczek, ale na pewno nie jest ciasteczkiem. – sic1

0

Jest to rozwiązanie, które działa na Androidzie też:

zainstalować wtyczkę https://github.com/wymsee/cordova-HTTP wykonywać dowolne HTTP (S) żądania.

Wymień XMLHttpRequest z alternatywą wtyczki (cordovaHTTP.get lub 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); 
}); 

Odpowiedź będzie zawierała stanu, dane i response.headers["Set-Cookie"], które mogą być przetwarzane przez nazwa, wartość, domeny, ścieżki, a nawet HttpOnly flagi; -)

Wspomniany cookies mogą być zapisane w LocalStorage i wysyłane w kolejnych wniosków (patrz cordovaHTTP.setHeader() lub header parametr .get/.post metod) do symulacji uwierzytelnionego użytkownika na reklamę przeglądarka esktop.

Powiązane problemy