我有一个 Android 应用程序,我将 Multipart 帖子发送到 Servlet。但我需要将呼叫限制为每 5 分钟一次。通过网络表单,我可以使用 cookie。对于 android 应用程序,它不能那样工作。我怎样才能让它工作?
问问题
4184 次
2 回答
3
要保持与服务器的 http 会话,您可以遵循以下方法(假设您使用 HttpClient 进行通信):
每次服务器启动一个新会话时,它都会发送一个 cookie 名称Set-Cookie
,其值包含可用作服务器会话 ID 的 jessionid。因此,每次对服务器进行网络调用时,请在代码中检查响应中的此 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 回答