1

マルチパートポストをサーブレットに送信する Android アプリケーションがあります。しかし、通話を 5 分に 1 回に制限する必要があります。Web フォームでは、Cookie を使用できます。Android アプリケーションの場合、そのようには機能しません。どうすればそれを機能させることができますか?

4

2 に答える 2

3

サーバーとの http セッションを維持するには、次のアプローチに従うことができます (通信に HttpClient を使用していると仮定します)。

サーバーが新しいセッションを開始するたびにSet-Cookie、サーバーとのセッション ID として使用できる jessionid を含む値を持つ 1 つの Cookie 名を送信します。そのため、サーバーに対してネットワーク呼び出しを行うたびに、コードで、応答でこの Cookie を確認してください。この Cookie が存在する場合は、jessionid も含まれているかどうかを確認してください。次のコードを使用して、Set-Cookie ヘッダーから jessionid を確認および解析できます。

HttpResponse response = httpClient.execute(get);

switch (response.getStatusLine().getStatusCode()) {
            case 200:
                          parseSessionID(response);
                          //process the response
                         break; 
}

private void parseSessionID(HttpResponse response) {
    try {

        Header header = response.getFirstHeader("Set-Cookie");

        String value = header.getValue();
        if (value.contains("JSESSIONID")) {
            int index = value.indexOf("JSESSIONID=");

            int endIndex = value.indexOf(";", index);

            String sessionID = value.substring(
                    index + "JSESSIONID=".length(), endIndex);

            Logger.d(this, "id " + sessionID);

            if (sessionID != null) {
                classStaticVariable= sessionID;
            }

        }
    } catch (Exception e) {
    }

}

解析された ID を後でアクセスできる場所に保存します。私は通常、ネットワークマネージャーに静的フィールドを作成し、そのフィールドに jessionid を保存します。

ネットワークリクエストを行うときはいつでも、次のコードで行われるように jessionid に必要な Cookie を設定します。

private void setDefaultHeaders(HttpUriRequest httpRequest, Request request) {

        if (classStaticVariable!= null) {
            httpRequest.setHeader("Cookie", "JSESSIONID=" + classStaticVariable);
        }

    }

HttpClient 実行メソッドを呼び出す前に、このメソッドを呼び出します。

注: Java ベースのサーバーでのみテストしました。

于 2012-11-16T10:03:32.450 に答える
1

使用してみましたか:

  1. SharedPreferences、はるかに簡単なもの、および
  2. AccountManager
于 2012-11-16T09:35:57.853 に答える