phonegap: la authentication basada en cookies (PHP) no funciona

Estoy trabajando en una aplicación web mobile con Sencha Touch, HTML5 y phonegap como envoltorio.

Estoy usando PHP-Authentication (Cookie) y ajax-requests. Todo funciona bien en Safari o Chrome, pero después del deployment con phonegap (webview) ya no funciona …

Cualquier ayuda sería apreciada 🙂

Algunos más detalles:

Todos los datos de mi aplicación se cargan mediante requestes ajax a mi componente de server "mobile.php". Utilizo PHP-Auth básico para autenticar al usuario:

  1. AJAX-Request [nombre de usuario, contraseña] -> mobile.php -> Sesión establecida (cookie)
  2. Todas las demás requestes si auth fue exitosa

¿Cuál es la diferencia entre un website normal de safari y el webview?

me lo imaginé:

debe cambiar el file phonegap_delegate.m y agregar lo siguiente al método 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 shanetworkingHTTPCookieStorage]; [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; return [super init]; } 

permite que webview acepte cookies de requestes ajax

Si sus requestes de Phonegap AJAX no están activando devoluciones de llamada como se supone que deben hacerlo, este puede ser el motivo.

Si la respuesta que está recibiendo intenta establecer cookies y no ha hecho la corrección de Michael, su request (jquery) AJAX fallará en silencio, ni éxito: ni error: las devoluciones de llamada se dispararán a pesar de que el server realmente recibió la request y envió una respuesta. Parece que debe hacer esto incluso si no le importan las cookies.

Espero que esto ayude a alguien.

No me importaron las cookies, ¡pero pasé algunas horas intentando descubrir por qué las llamadas no se dispararon!

Hay una solución que también funciona en Android:

Instale el complemento https://github.com/wymsee/cordova-HTTP para realizar requestes HTTP (S) arbitrarias.

Reemplace XMLHttpRequest con la alternativa del complemento ( cordovaHTTP.get o cordovaHTTP.post ):

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

La respuesta contendrá el estado, los datos y response.headers["Set-Cookie"] , que se pueden analizar para el nombre, el valor, el dominio, la ruta e incluso las banderas de HttpOnly 😉

Dicha cookie se puede save en LocalStorage y enviarse en requestes posteriores (ver cordovaHTTP.setHeader() o parámetro de header de los methods .get / .post ) para simular un usuario autenticado en un browser de escritorio.

Las mejores forms de almacenar y eliminar cookies funciona bien en mi aplicación, que está en vivo

Para save el valor en una cookie

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

Para get valor en la cookie

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

Para eliminar el valor de la cookie

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