phonegap: autenticación basada en cookies (PHP) no funciona

Estoy trabajando en una aplicación web móvil usando Sencha Touch, HTML5 y Phonegap como un contenedor.

Estoy usando PHP-Authentication (Cookie) y ajax-requests. Todo funciona bien en safari o Chrome, pero después del despliegue 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 solicitudes ajax a mi componente de servidor “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 solicitudes si la autenticación fue exitosa

¿Cuál es la diferencia entre un sitio web normal de safari y la vista web?

me lo imaginé:

tienes que cambiar el archivo 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 sharedHTTPCookieStorage]; [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; return [super init]; } 

permite que webview acepte cookies de solicitudes ajax

Si sus solicitudes Phonegap AJAX no están activando devoluciones de llamada como se supone que deben hacerlo, esta puede ser la razón.

Si la respuesta que está recibiendo intenta establecer cookies y no ha realizado la solución de Michael, su solicitud (jquery) de AJAX fallará en silencio, sin éxito: ni error: las devoluciones de llamada se dispararán a pesar de que el servidor realmente recibió la solicitud y envió una respuesta. Parece que debes hacer esto incluso si no te importan las cookies.

Espero que esto ayude a alguien.

No me importaron las cookies, ¡pero solo pasé unas horas tratando de descubrir por qué las devoluciones de llamada no se activaron!

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

Instale el complemento https://github.com/wymsee/cordova-HTTP para realizar solicitudes 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á status, data y response.headers["Set-Cookie"] , que se pueden analizar para nombre, valor, dominio, ruta e incluso banderas HttpOnly 😉

Dicha cookie se puede guardar en LocalStorage y enviarse en solicitudes posteriores (consulte cordovaHTTP.setHeader() o el parámetro de header de los métodos .get / .post ) para simular un usuario autenticado en un navegador de escritorio.

Las mejores formas de almacenar y recibir cookies funcionan bien en mi aplicación que está en vivo

Para almacenar valor en la cookie

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

Para obtener valor en las cookies

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

Para eliminar el valor de la cookie

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