0

我已经成功地在我的 sharepreference 中检索并存储了一个 cookie。使用下面的 post 方法:

public static void postData() throws JSONException {
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(Constant.CONNECTION_URL);
        ResponseHandler<String> resonseHandler = new BasicResponseHandler();

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("login",""));
            nameValuePairs.add(new BasicNameValuePair("pass",""));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            response = httpclient.execute(httppost,resonseHandler);

            JSONObject obj = new JSONObject(response);
            success = obj.get("success").toString();
            fname=obj.get("fname").toString();

            if (success.equalsIgnoreCase("1")){
                //connection successfull
                login_success_status.SavePreferences("login_success_status", success);
                login_success_fname.SavePreferences("login_success_fname",fname);
                List<Cookie> cookies = ((AbstractHttpClient) httpclient).getCookieStore().getCookies();
                CookieSyncManager.getInstance().sync();

                cookie_name.SavePreferences("cookie_name",cookies.toString());

现在我需要使用另一个 url 和存储在 sharepreference 中的 cookie 再次调用 webservice。如何使用附加了此 cookie 的 http 进行呼叫,以及如何在我的应用程序中保持 cookie 处于活动状态。

4

1 回答 1

0

当您登录到服务器时究竟发生了什么,在客户端和服务器之间创建了一个会话,并且您在 cookie 中获得了该会话 ID。此会话 ID 在您从应用程序注销后由服务器设置的一段时间内有效,此会话已过期,对于下一次调用不再有效。如果您使用的是网上银行,您可能会在登录后知道您的偶像时间。当您在一段时间后单击任何选项时,它会说您的会话已过期并重定向到登录页面。一旦您从应用程序中退出,就会出现相同的情况,以前的 cookie 在过期后就没有用了。因此,将 cookie 持久地存储在 sharedpreferences 中没有任何好处。

1) 声明List<Cookie> cookiespublic static

public static List<Cookie> cookies ;

2) 无需在 sharedpreferences 中写入 cookie

HttpClient httpclient = new DefaultHttpClient();
        if (cookies != null) {
            int size = cookies.size();
            for (int i = 0; i < size; i++) {
                httpclient.getCookieStore().addCookie(cookies.get(i));
            }
        }
        HttpPost httppost = new HttpPost(Constant.CONNECTION_URL);
        ResponseHandler<String> resonseHandler = new BasicResponseHandler();

3)在这里更新

if (success.equalsIgnoreCase("1")){
                //connection successfull
                login_success_status.SavePreferences("login_success_status", success);
                login_success_fname.SavePreferences("login_success_fname",fname);
cookies = ((AbstractHttpClient) httpclient).getCookieStore().getCookies();
于 2013-11-13T06:50:02.943 回答