web-dev-qa-db-ja.com

phonegap:Cookieベースの認証(PHP)が機能しない[webview]

Sencha touch、HTML5、phonegapをラッパーとして使用するモバイルWebアプリに取り組んでいます。

PHP-Authentication(Cookie)とajax-requestsを使用しています。サファリまたはクロームではすべて正常に動作しますが、phonegap(webview)を使用してデプロイした後は、動作しなくなります...

どんな助けもいただければ幸いです:)

詳細:

アプリのすべてのデータは、サーバーコンポーネント「mobile.php」へのajaxリクエストを介して読み込まれます。私は基本的なPHP-Authを使用してユーザーを認証します。

  1. AJAX-リクエスト[ユーザー名、パスワード]-> mobile.php->セッションが確立されました(Cookie)
  2. 認証が成功した場合の他のすべてのリクエスト

通常のサファリWebサイトとWebビューの違いは何ですか?

27
meaku

私はそれを考え出した:

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はajaxリクエストからのCookieを受け入れることができます

27
meaku

Phonegap AJAXリクエストが想定どおりにコールバックを起動しない場合は、これが理由である可能性があります。

受け取った応答がCookieの設定を試み、Michaelの修正を行っていない場合、(jquery)AJAXリクエストは静かに失敗します-成功:またはエラー:コールバックは発生しませんがサーバーが実際にリクエストを受信して​​レスポンスを送信したという事実。Cookieを気にしない場合でも、これを行う必要があるようです。

これが誰かに役立つことを願っています。

私はCookieを気にしませんでしたが、コールバックが起動しなかった理由を理解するために数時間を費やしました。

2
NAD

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に保存し、後続のリクエストで送信して(_.get_/_.post_メソッドのcordovaHTTP.setHeader()またはheaderパラメーターを参照)、シミュレートできます。デスクトップブラウザで認証されたユーザー。

0
Ferdinand.kraft