码迷,mamicode.com
首页 > 移动开发 > 详细

关于安卓中的cookie管理

时间:2014-08-18 17:56:42      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   for   ar   问题   

 

     Cookie管理是大家在做安卓app中难以避免的问题。我在此发表一些拙见。

     先先看看cookie可能存放的位置

  1.Httpclient会存储当次请求的cookie内容,存储位置在 httpClient.getCookieStore 但是apache建议自定义cookie存储方式,因为cookiestore把cookie放在arraylist里很容易被系统回收[1]。

  2.WebView会存储cookie在CookieManager,具体使用方式,后续的文章会讲这里不是重点。

  正常HttpClient中得Cookie是不能与WebView中得Cookie共享的所以这里需要一个中间变量(这里叫做CookieMap)来管理Cookie。每次请求的时候都要刷新CookieMap,我推荐的Cookie管理方式是只增加、修改不删除。每次请求完成都要进行一次Cookie同步,有的app要求保持登陆状态,所以也有必要把cookie放入Preference。

        List<Cookie> cookieList = httpClient.getCookieStore().getCookies();
        if (context == null || cookieList == null || cookieList.size() == 0) {
            return;
        }

        SharedPreferences preferences = context.getSharedPreferences(Constant.HTTPHEAD, Context.MODE_PRIVATE);
        Editor edit = preferences.edit();

        for (Cookie cookie : cookieList) {
            edit.putString(cookie.getName(), cookie.getValue());
            httpCookiesMap.put(cookie.getName(), cookie);
        }

        edit.commit();

 

 

  在请求之前,如果要自己在header中setcookie的话那么就不要保留httpclient中的cookie否则容易造成给服务器提交的request的header中包含两个cookie的情况,有的会造成服务器混乱。

        // 由于自行处理cookie所以要清理client管理的cookie否则容易出现两个cookie头的情况
        httpClient.getCookieStore().clear();
        String strHeader =getCookiesForHttpHeader(context);
        request.setHeader(Constant.COOKIE, strHeader);
        HttpResponse response = httpClient.execute(request);  

  偶尔会碰到api和webview所做的请求在不同域的情况那么就要求重新设置cookie的域和path,这里鼓励把path范围设置的大一些否则有些请求可能得不到cookie。

cookieManager.setCookie(url, key + "=" + cookie.getValue() + ";domain=" + "xxxx.com"+";path=/");

  下面是当Logout的时候需要做得cookie清理工作,如果使用cookie来判断是否登录的话,则只清理本地cookiemap和Preference中得cookie是不够的。还需要清理掉webview中的对应的cookie。否则下次登陆依然是登陆状态。

        // 清理内存cookie
        httpCookiesMap.clear();
        // 清理httpclientcookie
        httpClient.getCookieStore().clear();
        // 清理掉WebViewCookie
        CookieManager.getInstance().removeAllCookie();
        CookieSyncManager.getInstance().sync();

        // 清理preferencecookie相关的项目
        SharedPreferences preferences = context.getSharedPreferences(Constant.HTTPHEAD, Context.MODE_PRIVATE);
        Editor editor = preferences.edit();
        editor.remove(Constant.ACCOUNT);
        editor.remove(Constant.NICKNAME);
        editor.remove(Constant.PHPSESSID);
        editor.commit();

  希望这篇文章对大家的工作有所帮助。接下来会写一篇关于httpclient配置的文章。

 [1].http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html

关于安卓中的cookie管理,布布扣,bubuko.com

关于安卓中的cookie管理

标签:style   blog   http   color   使用   for   ar   问题   

原文地址:http://www.cnblogs.com/sharpchenxiang/p/3919903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!