关于安卓中的cookie管理 - Sharp陈响

标签: 安卓 cookie 管理 | 发表时间:2014-08-18 16:46 | 作者:Sharp陈响
出处:

 

     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管理,转载请注明。

相关 [安卓 cookie 管理] 推荐:

关于安卓中的cookie管理 - Sharp陈响

- - 博客园_首页
     Cookie管理是大家在做安卓app中难以避免的问题.      先先看看cookie可能存放的位置.   1.Httpclient会存储当次请求的cookie内容,存储位置在 httpClient.getCookieStore 但是apache建议自定义cookie存储方式,因为cookiestore把cookie放在arraylist里很容易被系统回收[1].

细说Cookie

- ~Wing~ - 博客园-首页原创精华区
Cookie虽然是个很简单的东西,但它又是WEB开发中一个很重要的客户端数据来源,而且它可以实现扩展性很好的会话状态, 所以我认为每个WEB开发人员都有必要对它有个清晰的认识. 本文将对Cookie这个话题做一个全面的描述, 也算是本人对Cookie的认识总结. Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递.

LTPA Cookie原理

- - Web前端 - ITeye博客
Lightweight Third-Party Authentication (LTPA)是IBM Websphere和Domino产品中使用单点登录技术. 当服务器配置好LTPA认证方式,用户通过浏览器成功登录后,服务器会自动发送一个session cookie给浏览器;此cookie中包含一个LTPA Token.

session和cookie详解

- - ITeye博客
摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一 技术. 本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答. 二、HTTP协议与状态保持.

Cookie深度解析

- - CSDN博客互联网推荐文章
       最近在公司做了Web端单点登录(SSO)功能,基于Cookie实现,做完之后感觉有必要总结一下,本文着重讲解Cookie,下文会说明单点登录的实现方案.        众所周知,Web协议(也就是HTTP)是一个无状态的协议. 一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.

Cookie:并非洪水猛兽

- - 互联网分析
腾讯科技 雷建平 王可心. 任何事物都有两面性,网易、品友互动等将针对客户的“高超话术”用到央视315暗访人员身上,不但未能提升销售业绩,还致使自己乃至整个互联网营销业深陷舆论危机. 在央视315晚会镁光灯下,不仅身为媒体的网易无意中被推上舞台,品友互动、易传媒、亿玛、悠易、传漾公司这些数字广告平台商“火”了一把:涉嫌通过Cookie盗取用户信息.

文章: Cookie安全漫谈

- - InfoQ cn
在Web应用中,Cookie很容易成为安全问题的一部分. 从以往的经验来看,对Cookie在开发过程中的使用,很多开发团队并没有形成共识或者一定的规范,这也使得很多应用中的Cookie成为潜在的易受攻击点. 在给Web应用做安全架构评审(Security architecture review)的时候,我通常会问设计人员以下几个问题:.

奇怪的 IE Cookie 设置

- - IE浏览器中文网站
今天接到一个奇怪的问题,所有的浏览器都可以正常执行,唯独在 IE10 浏览器下运行会有问题,花了一些时间找问题到底是什么,这篇记录一下,希望能帮到不小心路过的网友. 经过一番 IE8, IE10, Chrome, Firefox 交叉测试后,发现 IE8 的状态栏有个小小的安全性提示(本来要截图,结果 … 选了接受 cookie 就 … 看不到图了),幸好有使用 IE8 做测试,真是不幸中的大幸,IE10 完全自己暗槓起来什么都不说啊 ~~~.

深入解析Cookie技术

- - FreeBuf.COM
在Web技术的发展史上,Cookie技术的出现是一次重大的 变革. 但是, Cookie技术又是一项非常有争议的技术,从它诞生之日起就成了广大网络用户和Web开发人员的一个争论焦点,原因不是Cookie的功能太弱,而是认为Cookie的使用会对网络用户的隐私信息构成危害. Cookie技术最先被Netscape公司引入到Navigator浏览器中.

说说Cookie和Session - 逝宇、

- - 博客园_首页
Session和Cookie在网站开发中是用来保存用户与后端服务器的交互状态. 而且,他们的优点和应用场景是对立的. 完整地描述:当一个用户通过HTTP访问一个服务器时,这个服务器会将一些Key/Value键值返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时,用户下次访问这个服务器时,数据又将完整地带回给服务器.