Подтвердить что ты не робот

Phonegap: проверка подлинности на основе файлов cookie (PHP) не работает [webview]

Я работаю над мобильным веб-приложением, используя sencha touch, HTML5 и телефонную развязку в качестве обертки.

Я использую PHP-аутентификацию (Cookie) и ajax-запросы. Все работает отлично на сафари или хроме, но после развертывания с помощью phonegap (webview) он больше не работает...

Любая помощь будет оценена:)

Дополнительная информация:

Все данные для моего приложения загружаются через ajax-запросы на мой серверный компонент "mobile.php". Я использую базовый PHP-Auth для аутентификации пользователя:

  • AJAX-Request [имя пользователя, пароль] → mobile.php - > Установлена ​​сессия (cookie)
  • Все остальные запросы, если auth был успешным

Какая разница между обычным сайтом сафари и веб-просмотром?

4b9b3361

Ответ 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();