Phonegap: проверка подлинности на основе файлов cookie (PHP) не работает [webview]
Я работаю над мобильным веб-приложением, используя sencha touch, HTML5 и телефонную развязку в качестве обертки.
Я использую PHP-аутентификацию (Cookie) и ajax-запросы. Все работает отлично на сафари или хроме, но после развертывания с помощью phonegap (webview) он больше не работает...
Любая помощь будет оценена:)
Дополнительная информация:
Все данные для моего приложения загружаются через ajax-запросы на мой серверный компонент "mobile.php".
Я использую базовый PHP-Auth для аутентификации пользователя:
- AJAX-Request [имя пользователя, пароль] → mobile.php
- > Установлена сессия (cookie)
- Все остальные запросы, если auth был успешным
Какая разница между обычным сайтом сафари и веб-просмотром?
Ответы
Ответ 1
Я понял:
вам нужно изменить файл phonegap_delegate.m и добавить следующий метод 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];
}
он позволяет webview принимать файлы cookie из ajax-запросов
Ответ 2
Если ваши запросы AjAX Phonegap не запускают обратные вызовы, как они предполагают, это может быть причиной.
Если в ответе вы пытаетесь установить файлы cookie, и вы еще не сделали Michael, то ваш запрос (jquery) AJAX завершится неудачно - ни успех: ни ошибка: обратные вызовы будут срабатывать, несмотря на то, что на самом деле сервер получил запрос и отправил ответ. Похоже, вы должны это сделать, даже если вам не нужны куки.
Я надеюсь, что это поможет кому-то.
Мне не нравились куки, а просто потратили несколько часов, пытаясь понять, почему обратные вызовы не срабатывали!
Ответ 3
Есть решение, которое также работает на android:
Установите плагин https://github.com/wymsee/cordova-HTTP для выполнения произвольных запросов HTTP (S).
Замените XMLHttpRequest
альтернативой плагина (cordovaHTTP.get
или 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);
});
Ответ будет содержать статус, данные и response.headers["Set-Cookie"]
, которые могут быть проанализированы для имени, значения, домена, пути и даже флагов HttpOnly; -)
Сказанное cookie может быть сохранено в LocalStorage
и отправлено в последующих запросах (см. cordovaHTTP.setHeader()
или header
параметр методов .get
/.post
) для имитации аутентифицированного пользователя в обозревателе рабочего стола.
Ответ 4
Лучшие способы для хранения получить и удалить cookie свою работу в моем приложении, которое находится в режиме реального времени
Чтобы сохранить значение в файле cookie
window.localStorage.setItem("key", "value");
Получить значение в файле cookie
var value = window.localStorage.getItem("key");
Удалить значение cookie
window.localStorage.removeItem("key");
window.localStorage.clear();