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:
- AJAX-Request [nombre de usuario, contraseña] -> mobile.php -> sesión establecida (cookie)
- 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