Android中的cookie管理简介
2015-08-09 22:32
796 查看
先看看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。
查看本栏目更多精彩内容:http://www.bianceng.cn/OS/extra/
在请求之前,如果要自己在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范围设置的大一些否则有些请求比如(ajax,jsonp)可能得不到cookie。
cookieManager.setCookie(url, key + "=" + cookie.getValue() + ";domain=" + "xxxx.com"+";path=/");
下面是当Logout的时候需要做得cookie清理工作,如果使用cookie来判断是否登录的话,则只清理本地cookiemap和Preference中得cookie是不够的。还需要清理掉webview中的对应的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();
查看本栏目更多精彩内容:http://www.bianceng.cn/OS/extra/
在请求之前,如果要自己在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范围设置的大一些否则有些请求比如(ajax,jsonp)可能得不到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();
相关文章推荐
- android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)
- android中可以使用bitmap的平铺,镜像平铺等减小图片带来的apk过大的问题
- Android-PullToRefresh下拉刷新,上拉加载
- android view(二)
- Android仿360手机卫士波浪球进度的实现
- Android基础之Activity的生命周期
- Android 计步器开发
- 浅谈Android system_service 注册Service、APP获取并访问服务(PMS:PowerManagerService)为例
- android 安卓开发通过 无线wifi 调试 APK (不用Root) 及 ROOT 后无线wifi调试 源码
- Android图片轮播组件
- Android中颜色设置的三种方法
- (android)EventBus实战
- Android Framework 记录之一
- android模拟器启动停留于一画面 Waiting for HOME ('android.process.acore') to be launched...
- 第一章 工欲善其事 其利润—Android SDK工具(2)
- Android应用程序打包时,出现错误:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).....
- android studio学习(1)
- android AsyncTask使用
- 万能ListView适配器
- android 音乐播放器总结