ajax cookies ios webview cordova

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



ios webview (4)

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?


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: ''[email protected]'', 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();


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!


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