マルチパートポストをサーブレットに送信する Android アプリケーションがあります。しかし、通話を 5 分に 1 回に制限する必要があります。Web フォームでは、Cookie を使用できます。Android アプリケーションの場合、そのようには機能しません。どうすればそれを機能させることができますか?
			
			4184 次
		
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        
        
		
使用してみましたか:
- SharedPreferences、はるかに簡単なもの、および
- AccountManager
于 2012-11-16T09:35:57.853   に答える