Ich arbeite an einer PhoneGap-App mit Serversitzungsnutzung. Für die Sitzung sind Cookies erforderlich. Darüber hinaus sollte auch das Cookie vom Load Balancer verarbeitet werden. Es führt also kein Weg vorbei. Wie gehen Sie mit Cookies in Ihrer PhoneGap-App um?
Ich habe bereits einige Nachforschungen angestellt:
- Einige sagen, dass die Behandlung von Cookies davon abhängen kann, dass der Server keine Cookies für unbekannte Benutzeragenten (IIS) setzt: PhoneGap-Sitzung (Cookies) unter iOS
- In JavaScript können Cookies mit document.cookie = ... gesetzt werden, sie werden jedoch nicht in PhoneGap gespeichert und gehen verloren. Vor dem Auslösen von xhr-Anfragen funktioniert es.
- Cookies können nach xhr-Anfrage mit xhr.getResponseHeader ('Set-Cookie') abgerufen werden. Aber nur wenn tatsächlich auf dem Server eingestellt. Leider entfernt jQuery den "Cookie" -Header.
- Die JavaScript-Eigenschaft document.cookie wird nach (xhr) -Anforderungen nicht zugewiesen und nicht aktualisiert.
- Einige schlagen den localStorage vor, um Sitzungs-IDs usw. zu speichern. Alle Skripte können jedoch darauf zugreifen, und dies kann ein XSS-Sicherheitsproblem sein. Cookies umgehen dieses Problem mithilfe des httponly-Flags.
- iOS: Es gibt einige Änderungen, die das WebView-Verhalten ändern, um Cookies zu unterstützen. Sie scheinen jedoch nicht mit iOS 6 und PhoneGap 2.5 zu funktionieren: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
- Cookies scheinen in AppDelegate.m (v2.5) standardmäßig aktiviert zu sein.
cordova
cookies
xmlhttprequest
Bernd
quelle
quelle
Antworten:
Freund, ich habe auch erfolglos versucht, Cookies mit Phonegap zu verwenden. Die Lösung war localStorage.
Kurzes Schlüsselbeispiel:
Set Item Quick Beispiel:
Schnelles Beispiel für Artikel
Artikel entfernen Kurzes Beispiel:
Klares Schnellbeispiel:
Wenn Sie Ihr Javascript sowohl für Mobilgeräte als auch für das Internet verwenden, können Sie diesen Code verwenden, um diese Umgebung zu erkennen:
Referenzen: http://docs.phonegap.com/de/1.2.0/phonegap_storage_storage.md.html#localStorage http://cordova.apache.org/docs/en/6.x/cordova/storage/storage.html # page-toc-source
Beachten Sie: Wenn Sie die anonyme Navigation unter iOS verwenden, funktioniert localstorage möglicherweise nicht wie erwartet. Ein einfacher Test, der für mich gut funktioniert:
quelle
Ähnlich wie Sie wollte ich Cookies verwenden, die von einem Server in meiner Anwendung gesetzt wurden, damit meine App mit dem Web konsistent ist und keine separate Geräte-ID oder eine andere Methode zur Authentifizierung erfordert.
Was ich entdeckt habe, ist Folgendes:
$.get()
oder$.post()
) bleiben nicht bestehenDer Weg, um ein Cookie zum Fortbestehen zu bringen, ist die Verwendung von inAppBrowser- Plugin.
Richten Sie zunächst einen einfachen Server ein, der als GET-Parameter Schlüsselwertparameter akzeptiert, die Sie beibehalten möchten. Ich bin ein Python / Tornado-Typ, daher könnte mein Server folgendermaßen aussehen:
Dann in Ihrer App:
Sie können dies dann wie folgt aufrufen:
quelle
Sie können die Sitzungs-ID auch an die anfordernde URL anhängen und abhängig von der Serveranwendungssprache Sitzungsdaten mit dem von Ihnen übergebenen Wert für die Sitzungs-ID der Abfragezeichenfolge abrufen. In PHP können Sie beispielsweise eine vorhandene Sitzung öffnen, indem Sie die Sitzungs-ID übergeben. Obwohl dies aufgrund des Risikos einer Sitzungsentführung nicht empfohlen wird, können Sie problemlos die IP-Adresse und den Browser testen, um sicherzustellen, dass die Sitzung vom selben Client stammt. Dies würde natürlich erfordern, dass Sie Ihre Sitzung ablaufen lassen, sobald der Client den Sitzungsbrowser schließt, und Sie daran hindern, Ansichten zwischenzuspeichern, da die Sitzung im eigentlichen HTML-Code enthalten wäre. Das Speichern von Daten auf dem lokalen Gerät ist für mich zumindest keine Option, da es dem Kunden zu viel aussetzt, was meiner Meinung nach ein weitaus größeres Sicherheitsrisiko darstellt.
quelle
$.post()
in jQuery, und dann eine lokale Variable festlegen. Wenn Sie alles verschlüsseln, ist das ziemlich sicher.Verwenden Sie die
device_id
, um bestimmte Datensätze auf der Serverseite zu adressieren. Erstellen Sie eine Datenbank Tabelle mit dem Namensession
auf dem Server mitdevice_id
,cookiename
,cookievalue
undtimestamp
als Spalten.Wenn ein Client über die Phonegap-App auf Ihren Webserver zugreift, holen Sie sich seine
device_id
und speichern Sie die Cookies in Ihrer Tabelle. Dasdevice_id here
fungiert als Zugriffstoken im OAuth-Protokoll.Aus Sicherheitsgründen müssen Sie jetzt die Gültigkeitsdauer dieser Datensätze verkürzen, da die Geräte-ID dauerhaft ist und Ihr Kunde eines Tages seine Telefone verkaufen möchte. Verwenden Sie daher,
timestamp
um den letzten Zugriff des Clients zu speichern und den Datensatz zu löschen, wenn seit beispielsweise 10 Tagen nicht mehr darauf zugegriffen wurde.quelle
Ich verwende Cordova 6.1 (derzeit die neueste Version) und habe tatsächlich Folgendes gefunden:
Wenn ich das Cookie über Javascript mit document.cookie = ... setze, funktioniert es nicht. Wenn ich jedoch eine Funktion setCookie über Ajax mit einer Funktion wie an den Server sende
und setzen Sie das Cookie auf der Serverseite mit
dann funktioniert es tatsächlich!
Hoffe das hilft. Prost
quelle
Hatte das gleiche Problem und entschied mich, evrth nach localStorage zu verschieben. Ich schrieb ein Plugin, damit Sie es auch verwenden können: Angular -Cookies-Mirror
quelle
natürlich kannst du.
ionic App senden Sie einfach ein Ajax-Requset, Cookie funktioniert gut oder hängt nicht vom Server ab.
Ich habe Arbeit mit Python Django Server und Node Server, beide Cookie hat sehr gut funktioniert
Knotencode unten
Rest api
ionischer App-Code
Sie können meinen Quellcode hier überprüfen
quelle
Ich denke, die Frage betrifft im Wesentlichen das Setzen von clientseitigen Cookies für eine Cordova-App. Die meisten Informationen zu diesem Thema implizieren, dass das Setzen von clientseitigen Cookies für Cordova nicht funktioniert.
Ich habe jedoch ein Plugin gefunden, mit dem ich clientseitige Cookies für meine Cordova-App setzen kann.
Überprüfen Sie https://www.npmjs.com/package/cordova-plugin-cartegraph-cookie-master .
Es funktioniert einfach!
quelle
Ich hatte auch Probleme mit Sitzungscookies mit Cordova + XHR-Anfragen. Die Cookies gehen bei jedem Neustart der App verloren. Zwei Dinge haben meine Probleme gelöst:
Cookies müssen ein Ablaufdatum haben.
Für alle XHR-Anforderungen muss das withCredentials- Flag auf true gesetzt sein.
quelle