如何使用Android应用程序管理会话

时间:2012-11-16 09:34:13

标签: android cookies

我有一个Android应用程序,我将Multipart帖子发送到Servlet。但我需要每5分钟限制一次通话。使用网络表单,我可以使用cookie。对于Android应用程序,它不会那样工作。我怎样才能使它发挥作用?

2 个答案:

答案 0 :(得分: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的服务器对其进行了测试。

答案 1 :(得分:1)

您是否尝试过使用:

  1. SharedPreferences,更容易,
  2. AccountManager