Pracuję nad aplikacją PhoneGap z wykorzystaniem sesji serwera. Do obsługi sesji potrzebuje plików cookie. Dodatkowo należy obsłużyć ciasteczko z load balancera. Więc nie ma innego wyjścia. Jak postępujesz z plikami cookie w aplikacji PhoneGap?
Przeprowadziłem już pewne badania:
- Niektórzy twierdzą, że obsługa plików cookie może zależeć od tego, czy serwer nie ustawia plików cookie dla nieznanych agentów użytkownika (IIS): sesja PhoneGap (pliki cookie) w systemie iOS
- W JavaScript pliki cookie można ustawić za pomocą document.cookie = ..., ale nie są one zapisywane w PhoneGap i tracone. Przed odpaleniem xhr żąda to działa.
- Pliki cookie można pobrać po żądaniu xhr za pomocą xhr.getResponseHeader ('Set-Cookie'). Ale tylko wtedy, gdy faktycznie jest ustawiony na serwerze. Niestety, jQuery usuwa nagłówek „Cookie”.
- Właściwość JavaScript document.cookie nie jest przypisywana i nie jest aktualizowana po żądaniach (xhr).
- Niektórzy sugerują, że localStorage zapisuje identyfikatory sesji itp. Ale wszystkie skrypty mają do niego dostęp i może to być problem z bezpieczeństwem XSS. Pliki cookie pozwalają obejść ten problem, używając flagi httponly.
- iOS: Istnieją pewne modyfikacje, które zmienią zachowanie WebView w celu obsługi plików cookie. Ale wydaje się, że nie działają z iOS 6 i PhoneGap 2.5: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
- Wydaje się, że pliki cookie są domyślnie włączone w AppDelegate.m (v2.5).
cordova
cookies
xmlhttprequest
Bernd
źródło
źródło
Odpowiedzi:
Przyjacielu, też bez powodzenia próbowałem używać plików cookie z phonegap. Rozwiązaniem było użycie localStorage.
Kluczowy szybki przykład:
Szybki przykład zestawu pozycji:
Szybki przykład pobierania przedmiotu
Szybki przykład usuwania pozycji:
Wyczyść szybki przykład:
Jeśli używasz javascript zarówno dla telefonów komórkowych, jak i stron internetowych, możesz użyć tego kodu, aby wykryć to środowisko:
Źródła: 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
Uwaga: korzystanie z anonimowej nawigacji na iOS może spowodować, że lokalny magazyn nie będzie działał tak, jak spodziewano się. Prosty test, który dla mnie działa dobrze:
źródło
Podobnie jak Ty, chciałem używać plików cookie ustawionych przez serwer w mojej aplikacji, aby moja aplikacja była spójna z siecią i nie wymagała oddzielnego identyfikatora urządzenia ani innej metody uwierzytelniania.
Oto co odkryłem:
$.get()
lub$.post()
) nie są trwałeSposobem na utrwalenie pliku cookie jest użycie wtyczki inAppBrowser .
Najpierw skonfiguruj prosty serwer, który akceptuje jako parametr GET parametry klucz-wartość, które chcesz zachować. Jestem facetem od Pythona / Tornado, więc mój serwer może wyglądać tak:
Następnie w swojej aplikacji:
Możesz to nazwać w następujący sposób:
źródło
Możesz również dołączyć identyfikator sesji do adresu URL żądającego i, w zależności od języka aplikacji serwera, pobrać dane sesji przy użyciu wartości identyfikatora sesji, którą podałeś - na przykład w PHP można otworzyć istniejącą sesję, przekazując identyfikator sesji. Chociaż nie jest to zalecane ze względu na ryzyko przechwytywania sesji, można łatwo przetestować adres IP i przeglądarkę, aby upewnić się, że sesja pochodzi z tego samego klienta. Wymagałoby to oczywiście wygaśnięcia sesji, gdy tylko klient zamknie przeglądarkę sesji i ograniczyłoby buforowanie widoków, ponieważ sesja byłaby uwzględniona w faktycznym html. Przechowywanie danych na lokalnym urządzeniu przynajmniej dla mnie nie jest tak naprawdę opcją, ponieważ naraża klienta zbyt wiele, co moim zdaniem jest znacznie większym zagrożeniem dla bezpieczeństwa.
źródło
$.post()
w jQuery, a następnie ustawić zmienną lokalną. Jeśli szyfrujesz wszystko, jest to całkiem bezpieczne.Użyj,
device_id
aby zaadresować określone rekordy po stronie serwera. Tworzenie tabeli bazy danych o nazwiesession
na serwerze zdevice_id
,cookiename
,cookievalue
itimestamp
jako kolumny.Gdy klient uzyskuje dostęp do serwera WWW za pośrednictwem aplikacji phonegap, pobierz jego
device_id
i zapisz pliki cookie w tabeli.device_id here
Działa jako token dostępu do protokołu OAuth.Teraz ze względów bezpieczeństwa musisz skrócić okres ważności tych rekordów, ponieważ device_id jest stały, a Twój klient chciałby pewnego dnia sprzedać swoje telefony. Dlatego użyj,
timestamp
aby zapisać ostatni dostęp klienta i usunąć rekord, jeśli nie był używany przez, powiedzmy, 10 dni.źródło
Używam Cordova 6.1 (w tej chwili najnowsza wersja) i tak naprawdę znalazłem:
Jeśli ustawię plik cookie przez Javascript za pomocą document.cookie = ..., to nie zadziała. Jeśli jednak wyślę funkcję setCookie przez Ajax do serwera z funkcją taką jak
i ustaw plik cookie po stronie serwera za pomocą
to faktycznie działa!
Mam nadzieję że to pomoże. Twoje zdrowie
źródło
Miałem ten sam problem i postanowiłem przenieść evrth na localStorage Napisałem wtyczkę, abyś mógł z niej również korzystać: angular-cookies-mirror
źródło
oczywiście, że możesz.
Aplikacja ionic wystarczy wysłać requset Ajax, plik cookie działa dobrze lub nie zależy od serwera.
Pracuję z serwerem Python Django i serwerem węzłów, oba pliki cookie działały bardzo dobrze
kod węzła poniżej
rest api
kod aplikacji ionic
tutaj możesz sprawdzić mój kod źródłowy
źródło
Myślę, że zasadniczo chodzi o ustawienie plików cookie po stronie klienta dla aplikacji Cordova. Większość informacji na ten temat sugeruje, że ustawienie plików cookie po stronie klienta nie działa w przypadku Cordova.
Ale znalazłem wtyczkę, która pozwala mi ustawić pliki cookie po stronie klienta dla mojej aplikacji Cordova.
Sprawdź https://www.npmjs.com/package/cordova-plugin-cartegraph-cookie-master .
Po prostu działa!
źródło
Miałem również problemy z plikami cookie sesji z żądaniami Cordova + XHR. Pliki cookie są tracone przy każdym ponownym uruchomieniu aplikacji. Dwie rzeczy rozwiązały moje problemy:
Pliki cookie muszą mieć datę ważności.
Wszystkie żądania XHR muszą mieć flagę withCredentials ustawioną na wartość true.
źródło