Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Android应用程序管理会话_Android_Cookies - Fatal编程技术网

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

如何使用Android应用程序管理会话,android,cookies,Android,Cookies,我有一个Android应用程序,我在其中向Servlet发送多部分post。但是我需要限制每5分钟打一次电话。通过网络表单,我可以使用cookies。对于android应用程序,它不是这样工作的。如何使其工作?您是否尝试过使用: 共享参考,更简单的参考,以及 会计经理 您是否尝试过使用: 共享参考,更简单的参考,以及 会计经理 若要维护与服务器的http会话,可以采用以下方法(假设您使用HttpClient进行通信): 每次服务器启动一个新会话时,它都会发送一个cookie名称集cookie,c

我有一个Android应用程序,我在其中向Servlet发送多部分post。但是我需要限制每5分钟打一次电话。通过网络表单,我可以使用cookies。对于android应用程序,它不是这样工作的。如何使其工作?

您是否尝试过使用:

共享参考,更简单的参考,以及 会计经理 您是否尝试过使用:

共享参考,更简单的参考,以及 会计经理
若要维护与服务器的http会话,可以采用以下方法(假设您使用HttpClient进行通信):

每次服务器启动一个新会话时,它都会发送一个cookie名称集cookie,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的服务器对其进行了测试。

要与服务器保持http会话,假设您使用的是HttpClient进行通信,则可以遵循以下方法:

每次服务器启动一个新会话时,它都会发送一个cookie名称集cookie,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的服务器进行了测试。

您也可以在android中使用CookieManager。您也可以在android中使用CookieManager。