PhoneGap: проверка подлинности на основе файлов cookie (PHP) не работает [веб-просмотр] - PullRequest
27 голосов
/ 14 сентября 2010

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

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

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

Некоторые подробности:

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

  1. AJAX-запрос [имя пользователя, пароль] -> mobile.php -> установленный сеанс (cookie)
  2. Все остальные запросы, еслиаутентификация прошла успешно

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

Ответы [ 4 ]

27 голосов
/ 14 сентября 2010

Я понял:

Вы должны изменить файл 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];
}

это позволяет веб-обозреванию принимать файлы cookie от запросов ajax

2 голосов
/ 07 марта 2011

Если ваши запросы PhoneGap AJAX не запускают обратные вызовы, как они должны, это может быть причиной.

Если в ответе вы пытаетесь установить куки, и вы не сделали исправление Майклатогда ваш (jquery) AJAX-запрос тихо завершится неудачей - ни успешно, ни с ошибкой: обратные вызовы сработают, несмотря на то, что сервер фактически получил запрос и отправил ответ.Похоже, вы должны сделать это, даже если вы не заботитесь о файлах cookie.

Я надеюсь, что это кому-то поможет.

Я не заботился о файлах cookie, но потратил несколько часов на попыткичтобы выяснить, почему обратные вызовы не сработали!

0 голосов
/ 20 июля 2017

Существует решение, которое работает и на Android:

Установите плагин https://github.com/wymsee/cordova-HTTP для выполнения произвольных запросов HTTP (S).

Замените XMLHttpRequest альтернативой плагина(cordovaHTTP.get или cordovaHTTP.post):

cordovaHTTP.post("https://example.com/login", {email: 'xyz@example.com', 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) для имитации аутентифицированного пользователя в браузере на рабочем столе.

0 голосов
/ 20 октября 2011

Лучшие способы хранения, получения и удаления cookie-файлов, которые работают нормально в моем приложении, работающем в режиме реального времени

Для сохранения значения в cookie-файле

window.localStorage.setItem("key", "value");

Чтобы получить значение в cookie-файле

var value = window.localStorage.getItem("key");

Удалить значение cookie

window.localStorage.removeItem("key");
window.localStorage.clear();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...