请求不会在PersistentCookieStore中使用已保存的Cookie

时间:2013-03-27 19:54:07

标签: java android http cookies

当我宣布一个cookie商店时,我修复了我的应用程序中的崩溃和错误,但它没有保存cookie或其他位置出错。

首先我称这两行:

AsyncHttpClient client = new AsyncHttpClient();
PersistentCookieStore myCookieStore;

然后我有一个POST:

public void postRequestLogin(String url, RequestParams params) {
    myCookieStore = new PersistentCookieStore(this);
    client.post(url, params, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            client.setCookieStore(myCookieStore);
            System.out.println(response);

            if(response.contains("Login successful!")) {
                TextView lblStatus = (TextView)findViewById(R.id.lblStatus);
                lblStatus.setText("Login successful!");
                getRequest("url");
            } else {
                TextView lblStatus = (TextView)findViewById(R.id.lblStatus);
                lblStatus.setText("Login failed!");
                TextView source = (TextView)findViewById(R.id.response_request);
                source.setText(response);
            }
        }
    });

}

然后它应该保存Logincookies并将其用于GET请求:

public void getRequest(String url) {
    myCookieStore = new PersistentCookieStore(this);
    client.get(url, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            client.setCookieStore(myCookieStore);
            System.out.println(response);
            TextView responseview = (TextView) findViewById(R.id.response_request);
            responseview.setText(response);
        }
    });
}

但它不使用cookies。当我执行GET请求时,我已经注销了。

编辑:我忘了说我使用了本教程中的lib:http://loopj.com/android-async-http/

1 个答案:

答案 0 :(得分:2)

我认为问题是您在请求完成后设置了cookie存储(在onSuccess方法中)。在提出请求之前尝试设置它:

myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);
client.post(url, params, new AsyncHttpResponseHandler() {

您还在每个请求上创建一个新的Cookie存储区。如果您执行多个请求会发生什么?它将创建一个新的cookie商店并使用它(新的cookie商店将没有你的cookie)。尝试将这部分代码移动到构造函数中:

myCookieStore = new PersistentCookieStore(this);
client.setCookieStore(myCookieStore);

然后将其从其他功能中删除。