マルチパートポストをサーブレットに送信する 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 に答える