Estoy trabajando en una aplicación PhoneGap con uso de sesión de servidor. Necesita cookies para manejar la sesión. Además, la cookie del equilibrador de carga también debe manejarse. Entonces no hay forma de evitarlo. ¿Cómo maneja las cookies en su aplicación PhoneGap?
Ya he realizado algunas investigaciones:
- Algunos dicen que el manejo de cookies puede depender de que el servidor no establezca cookies para agentes de usuario desconocidos (IIS): Sesión PhoneGap (cookies) en iOS
- En JavaScript, las cookies se pueden configurar con document.cookie = ..., pero no se guardan en PhoneGap y se pierden. Antes de disparar las solicitudes xhr, funciona.
- Las cookies se pueden recuperar después de la solicitud xhr con xhr.getResponseHeader ('Set-Cookie'). Pero solo cuando está realmente configurado en el servidor. Desafortunadamente, jQuery elimina el encabezado "Cookie".
- La propiedad document.cookie de JavaScript no se asigna y no se actualiza después de las solicitudes (xhr).
- Algunos sugieren localStorage para guardar los identificadores de sesión, etc. Pero todos los scripts pueden acceder a él y esto podría ser un problema de seguridad XSS. Las cookies solucionan este problema mediante el uso de la marca httponly.
- iOS: hay algunas modificaciones que cambiarán el comportamiento de webView para admitir cookies. Pero parece que no funcionan con iOS 6 y PhoneGap 2.5: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
- Las cookies parecen estar habilitadas de forma predeterminada en AppDelegate.m (v2.5).
cordova
cookies
xmlhttprequest
Bernd
fuente
fuente
Respuestas:
Amigo, también he intentado sin éxito usar cookies con phonegap. La solución fue usar localStorage.
Ejemplo rápido clave:
Ejemplo rápido de artículo de conjunto:
Ejemplo rápido de obtener artículo
Ejemplo rápido de quitar artículo:
Ejemplo rápido claro:
Si usa su javascript tanto para dispositivos móviles como para la web, puede usar este código para detectar ese entorno:
Referencias: http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html#localStorage http://cordova.apache.org/docs/en/6.x/cordova/storage/storage.html # page-toc-source
Tenga en cuenta: el uso de la navegación anónima en iOS puede hacer que el almacenamiento local no funcione como se esperaba. Una prueba simple que me está funcionando bien:
fuente
De manera similar a usted, quería usar cookies establecidas por un servidor dentro de mi aplicación para que mi aplicación fuera coherente con la web y no requiriera una identificación de dispositivo separada u otro método de autenticación.
Lo que descubrí es lo siguiente:
$.get()
o$.post()
) no persistenLa forma de conseguir que una cookie persista es utilizando el complemento inAppBrowser .
Primero, configure un servidor simple que acepte como parámetro GET los parámetros clave-valor que desea conservar. Soy un tipo de python / tornado, por lo que mi servidor podría verse así:
Luego, en tu aplicación:
A continuación, puede llamar a esto de la siguiente manera:
fuente
También puede agregar la identificación de la sesión a la URL solicitante y, según el idioma de la aplicación del servidor, recuperar los datos de la sesión utilizando el valor de la identificación de la sesión de la cadena de consulta que pasó. Si bien esto no se recomienda debido a los riesgos de secuestro de sesión, puede probar fácilmente la IP y el navegador para asegurarse de que la sesión provenga del mismo cliente. Por supuesto, esto requeriría que expirara su sesión tan pronto como el cliente cierre el navegador de sesiones y limitaría el almacenamiento en caché de las vistas ya que la sesión se incluiría en el html real. Almacenar datos en el dispositivo local para mí al menos no es realmente una opción, ya que expone demasiado al cliente, lo que en mi opinión es un riesgo de seguridad mucho mayor.
fuente
$.post()
en jQuery, luego establecer una variable local. Si encripta todo, es bastante seguro.Utilice
device_id
para abordar ciertos registros en el lado del servidor. Crear una tabla de base de datos llamadasession
en su servidor condevice_id
,cookiename
,cookievalue
ytimestamp
como columnas.Cuando un cliente accede a su servidor web a través de la aplicación phonegap, obtenga el suyo
device_id
y almacene las cookies en su mesa. Eldevice_id here
actúa como el token de acceso en el protocolo OAuth.Ahora, por razones de seguridad, debe reducir el período de validez de esos registros, porque el device_id es permanente y su cliente querría vender sus teléfonos algún día. Por lo tanto, utilice
timestamp
para almacenar el último acceso del cliente y elimine el registro si no se ha accedido durante, digamos, 10 días.fuente
Estoy usando Cordova 6.1 (la versión más reciente en este momento) y, de hecho, encontré lo siguiente:
Si configuro la cookie a través de Javascript usando document.cookie = ... entonces no funciona. Sin embargo, si envío una función setCookie a través de Ajax al servidor con una función como
y configure la cookie en el lado del servidor usando
entonces realmente funciona!
Espero que esto ayude. Salud
fuente
Tuve el mismo problema y decidí mover evrth a localStorage. Escribí el complemento para que puedas usarlo también: angular-cookies-mirror
fuente
por supuesto que puede.
La aplicación iónica solo envía un requset ajax, las cookies funcionan bien o no dependen del servidor.
Tengo trabajo con el servidor Python Django y el servidor de nodo, ambas cookies funcionaron muy bien
código de nodo a continuación
resto api
código de aplicación iónica
puedes consultar mi código de fuente aquí
fuente
Creo que la pregunta es fundamentalmente sobre la configuración de cookies del lado del cliente para una aplicación cordova. La mayor parte de la información sobre este tema implica que la configuración de cookies del lado del cliente no funciona para cordova.
Pero encontré un complemento que me permite configurar cookies del lado del cliente para mi aplicación cordova.
Consulte https://www.npmjs.com/package/cordova-plugin-cartegraph-cookie-master .
¡Simplemente funciona!
fuente
También tuve problemas con las cookies de sesión con las solicitudes Cordova + XHR. Las cookies se pierden cada vez que se reinicia la aplicación. Dos cosas han resuelto mis problemas:
Las cookies deben tener una fecha de vencimiento.
Todas las solicitudes XHR deben tener el indicador withCredentials establecido en verdadero.
fuente