Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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
Java 如何保持登录/维护cookie会话?_Java_Android_Http Post_Session Cookies_Setcookie - Fatal编程技术网

Java 如何保持登录/维护cookie会话?

Java 如何保持登录/维护cookie会话?,java,android,http-post,session-cookies,setcookie,Java,Android,Http Post,Session Cookies,Setcookie,我正在开发一个android应用程序,它向服务器发送一个带有用户名和密码的post请求,我成功地得到了正确的响应。但是,当我尝试在登录后单击发送另一个post请求的按钮时,我从服务器收到一条消息,说我没有登录。我知道这和储存饼干有关,有人能帮我吗?以下是html客户端代码: public class SimpleHttpClient { private static HttpClient mHttpClient; private static HttpClient ge

我正在开发一个android应用程序,它向服务器发送一个带有用户名和密码的post请求,我成功地得到了正确的响应。但是,当我尝试在登录后单击发送另一个post请求的按钮时,我从服务器收到一条消息,说我没有登录。我知道这和储存饼干有关,有人能帮我吗?以下是html客户端代码:

    public class SimpleHttpClient {

  private static HttpClient mHttpClient;


    private static HttpClient getHttpClient() {
    if (mHttpClient == null) {
        mHttpClient = new DefaultHttpClient();
        final HttpParams params = mHttpClient.getParams();
        HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);
        HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);
        ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);
    }
    return mHttpClient;
}


public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception {
    BufferedReader in = null;
    try {
        HttpClient client = getHttpClient();
        HttpPost request = new HttpPost(url);
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
        request.setEntity(formEntity);
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

        StringBuffer sb = new StringBuffer("");
        String line = "";
        String NL = System.getProperty("line.separator");
        while ((line = in.readLine()) != null) {
            sb.append(line + NL);
        }
        in.close();

        String result = sb.toString();
        return result;
    }
    finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
公共类SimpleHttpClient{
专用静态HttpClient mHttpClient;
私有静态HttpClient getHttpClient(){
if(mHttpClient==null){
mHttpClient=新的DefaultHttpClient();
最终HttpParams params=mHttpClient.getParams();
setConnectionTimeout(参数,HTTP_超时);
HttpConnectionParams.setSoTimeout(参数,HTTP_超时);
setTimeout(参数,HTTP_超时);
}
返回mHttpClient;
}
公共静态字符串executeHttpPost(字符串url、ArrayList后参数)引发异常{
BufferedReader in=null;
试一试{
HttpClient=getHttpClient();
HttpPost请求=新的HttpPost(url);
UrlEncodedFormEntity formEntity=新的UrlEncodedFormEntity(后参数);
请求。setEntity(formEntity);
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串行=”;
字符串NL=System.getProperty(“line.separator”);
而((line=in.readLine())!=null){
sb.追加(行+NL);
}
in.close();
字符串结果=sb.toString();
返回结果;
}
最后{
if(in!=null){
试一试{
in.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}

不久前我也遇到了同样的问题。
您可以在CookieStore中序列化Cookies,并在登录时将其保存在某处。

httpclient.execute(//login);
CookieStore cookieStore = httpclient.getCookieStore();
saveCookieData(cookieStore);
在发出post请求之前,将其反序列化,并将其设置为http客户端

httpclient.setCookieStore(retrieveCookieStore());

什么是getCookieStore()和SaveCookieStore()?DefaultHttpClient有一个方法getCookieStore(),该方法返回一个CookieStore,其中包含服务器返回的Cookie列表。关于方法SaveCookieStore()和retrieveCookieStore(),我把它们放在那里作为一个例子,你必须实现它们。在我的例子中,我的应用程序有一个数据库,所以我只是在那里添加了信息。你基本上可以在任何地方将其保存为字符串。