13

ユーザーがキャプチャへの回答を入力する必要がある Android アプリケーションがあります。Captcha はサーバー上で生成されます。が応答すると、検証のためにサーバーに送信されます。

問題は、Captcha の要求の後に HttpURLConnection を閉じる必要があるため、応答がサーバー上の別のセッションで実行されていることがわかります。このため、Captcha チェックはセッションに依存するため失敗します。

接続を維持する方法はありますか、それとも別の道をたどるべきですか? 同等のiPhoneアプリケーションでは、それらは「接続」されたままであるため、同じセッションIDを持っていることがわかっています。

編集:

    CookieManager cookieManager = new CookieManager();  
    CookieHandler.setDefault(cookieManager);

    URL urlObj = new URL(urlPath);
    conn = (HttpURLConnection) urlObj.openConnection();

    if (urlPath.toLowerCase().startsWith("https:")) {
        initializeHttpsConnection((HttpsURLConnection) conn);
    }
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Language", "en-US");
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty("Content-Length", Integer.toString(bodyData.length));
    if (_sessionIdCookie != null) {
        conn.setRequestProperty("Cookie", _sessionIdCookie);
    }
    // Connect
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.connect();
4

2 に答える 2

12

を使用してセッションを維持HttpURLConnectionするには、この部分を実行する必要があります

CookieManager cookieManager = new CookieManager();  
CookieHandler.setDefault(cookieManager);

すべての接続ではなく、一度だけ。適切な候補は、内部でアプリケーションを起動することができますApplication.onCreate();

于 2014-05-26T08:12:03.210 に答える