Я работаю над приложением PhoneGap с использованием сеанса сервера. Для обработки сеанса необходимы файлы cookie. Кроме того, необходимо обрабатывать файл cookie от балансировщика нагрузки. Так что выхода нет. Как вы обрабатываете файлы cookie в приложении PhoneGap?
Я уже провел небольшое исследование:
- Некоторые говорят, что обработка файлов cookie может зависеть от того, что сервер не устанавливает файлы cookie для неизвестных пользовательских агентов (IIS): сеанс PhoneGap (файлы cookie) на iOS
- В JavaScript файлы cookie можно установить с помощью document.cookie = ..., но они не сохраняются в PhoneGap и теряются. Перед запуском запросов xhr он работает.
- Файлы cookie могут быть получены после запроса xhr с помощью xhr.getResponseHeader ('Set-Cookie'). Но только при фактической установке на сервере. К сожалению, jQuery удаляет заголовок «Cookie».
- Свойство JavaScript document.cookie не назначается и не обновляется после (xhr) запросов.
- Некоторые предлагают localStorage сохранять идентификаторы сеансов и т. Д. Но все сценарии могут получить к нему доступ, и это может быть проблемой безопасности XSS. Файлы cookie позволяют решить эту проблему с помощью флага httponly.
- iOS: есть некоторые модификации, которые изменят поведение webView для поддержки файлов cookie. Но они, похоже, не работают с iOS 6 и PhoneGap 2.5: https://groups.google.com/forum/?fromgroups=#!topic/phonegap/ZJE1nxX63ow
- Похоже, что файлы cookie включены по умолчанию в AppDelegate.m (v2.5).
cordova
cookies
xmlhttprequest
Бернд
источник
источник
Ответы:
Друг, я тоже безуспешно пытался использовать куки-файлы при телефонной связи. Решение было использовать localStorage.
Краткий ключевой пример:
Быстрый пример установки элемента:
Быстрый пример получения предмета
Быстрый пример удаления элемента:
Очистить быстрый пример:
Если вы используете javascript как для мобильных устройств, так и для Интернета, вы можете использовать этот код для обнаружения этой среды:
Ссылки: 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
Имейте в виду: использование анонимной навигации в iOS может привести к тому, что localstorage не будет работать как указано. Простой тест, который мне подходит:
источник
Как и вы, я хотел использовать файлы cookie, установленные сервером в моем приложении, чтобы мое приложение было согласовано с Интернетом и не требовало отдельного идентификатора устройства или другого метода аутентификации.
Я обнаружил следующее:
$.get()
или$.post()
), не сохраняютсяТаким образом, чтобы файл cookie сохранялся, используйте плагин inAppBrowser .
Сначала настройте простой сервер, который принимает в качестве параметра GET параметры "ключ-значение", которые вы хотите сохранить. Я парень питон / торнадо, поэтому мой сервер может выглядеть так:
Затем в вашем приложении:
Затем вы можете назвать это следующим образом:
источник
Вы также можете добавить идентификатор сеанса к запрашивающему URL-адресу и, в зависимости от языка серверного приложения, получить данные сеанса, используя переданное вами значение идентификатора сеанса строки запроса - например, в PHP вы можете открыть существующий сеанс, передав идентификатор сеанса. Хотя это не рекомендуется из-за риска перехвата сеанса, вы можете легко проверить IP-адрес и браузер, чтобы убедиться, что сеанс исходит от одного и того же клиента. Это, конечно, потребует от вас истечения срока действия сеанса, как только клиент закроет обозреватель сеанса, и ограничит вас от кеширования представлений, поскольку сеанс будет включен в фактический html. Хранение данных на локальном устройстве для меня, по крайней мере, не вариант, так как это слишком много открывает для клиента, что, на мой взгляд, представляет собой гораздо больший риск для безопасности.
источник
$.post()
в jQuery, а затем установить локальную переменную. Если вы зашифруете все, это довольно безопасно.Используйте
device_id
для адресации определенных записей на стороне сервера. Создание таблицы базы данных с именемsession
на сервере сdevice_id
,cookiename
,cookievalue
и вtimestamp
качестве столбцов.Когда клиент обращается к вашему веб-серверу через приложение phonegap, получите его
device_id
и сохраните файлы cookie в своей таблице.device_id here
Выступает в качестве маркера доступа по протоколу OAuth.Теперь по соображениям безопасности вам необходимо сократить срок действия этих записей, потому что device_id является постоянным, и ваш клиент захочет продать свои телефоны в один прекрасный день. Поэтому используйте
timestamp
для сохранения последнего доступа клиента и удалите запись, если к ней не обращались в течение, скажем, 10 дней.источник
Я использую Cordova 6.1 (самая новая версия на данный момент), и на самом деле я обнаружил следующее:
Если я установлю файл cookie через Javascript, используя document.cookie = ..., он не сработает. Однако, если я отправлю на сервер функцию setCookie через Ajax с такой функцией, как
и установите cookie на стороне сервера, используя
тогда это действительно работает!
Надеюсь это поможет. Ура
источник
У меня была та же проблема, и я решил переместить evrth в localStorage, я написал плагин, чтобы вы также могли его использовать: angular-cookies-mirror
источник
конечно вы можете.
ionic приложение просто отправляет запрос ajax, cookie работает хорошо или не зависит от сервера.
У меня есть работа с сервером Python Django и сервером узла, оба файла cookie работали очень хорошо
код узла ниже
отдых api
ионный код приложения
вы можете проверить мой исходный код здесь
источник
Я думаю, что вопрос в основном заключается в настройке файлов cookie на стороне клиента для приложения Cordova. Большая часть информации по этой теме подразумевает, что установка файлов cookie на стороне клиента не работает для Cordova.
Но я нашел плагин, который позволяет мне устанавливать файлы cookie на стороне клиента для моего приложения Cordova.
Посетите https://www.npmjs.com/package/cordova-plugin-cartegraph-cookie-master .
Просто работает!
источник
У меня также были проблемы с файлами cookie сеанса с запросами Cordova + XHR. Файлы cookie теряются при каждом перезапуске приложения. Две вещи решили мои проблемы:
У файлов cookie должен быть срок годности.
Все запросы XHR должны иметь флаг withCredentials, установленный в значение true.
источник