关于安卓中的cookie管理

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管理

时间: 2024-10-03 22:39:55

关于安卓中的cookie管理的相关文章

Java中的会话管理——HttpServlet,Cookies,URL Rewriting(译)

参考谷歌翻译,关键字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url-rewriting Java Web应用程序中的会话管理(Session Management)是一个非常有趣的话题.Java Servlet中的会话通过不同的方式进行管理,例如Cookie,HttpSession API,URL重写等. 这是Java Web应用程序系列教程中的第三篇文章,您可能

How Tomcat works — 八、tomcat中的session管理

在使用shiro的session的时候感觉对于tomcat中session的管理还不是特别清楚,而且session管理作为tomcat中比较重要的一部分还是很有必要学习的. 目录 概述 session的作用 session新建.查找和更新 session删除 总结 概述 在tomcatsession管理的类标准实现为StandardManager,主要作用为启动的是加载缓存的session,类关系如下: 在用户servlet中使用的session为StandardSessionFacade(也是

十二款很不错的Chrome Cookie管理插件,开发者必备之cookie插件

Cookie是开发者最常用的的功能了,本文介绍了Chrome商店中常用的一些cookie chrome插件,一共十二款chrome cookie插件,做一个图文集合,供开发者们参考学习,本站收集了全球所有的cookie开发者插件,中文翻译是由GOOGLE翻译完成的,请大家重点使用插件的下载功能,感谢! Cookie Killer for Facebook Chrome插件 保持Facebook的Facebook.com上.当你登出, Facebook的cookie被杀死,这样你,你遍历网页不被跟

解决安卓中页脚被输入法顶起的有关问题

解决安卓中页脚被输入法顶起的问题 在实际开发中,我们对页脚有两种要求:让其固定在底部或者被输入法托起.下面来看看这两种问题的解决办法 问题截图: 1.让页脚固定在底部(无论是否出现输入法) 解决办法:设置软键盘的输入模式:用窗体管理器设置布局参数为自动调整 方法一:java代码中实现:在你的activity中的oncreate中setContentView之前写上这个代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_IN

JavaSe:Cookie 管理的API介绍

CookieManager 在使用HttpURLConnection中,并没有关于Cookie的管理.如果使用Java程序时,怎么管理cookie呢? Cookie案例 1. User Agent -> Server POST /acme/login HTTP/1.1 [form data] 2. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Customer="WILE_E_COYOTE"; Version="

Jmeter--HTTP Cookie管理器

一.什么情况下需要用到Cookie 一般情况下对于HTTP请求的用户登入操作,需要用到Cookie来模拟用户操作,或者对一些业务只有在用户登入之后才能进行操作,比如:常见的场景有购买商品.下单.支付等操作需要用Cookie,此时,Jmeter提供了HTTP Cookie管理器, HTTP Cookie管理器作用 主要作用是将用户登入发送的Http请求用户cookie值及源站点信息保存jmeter在Cookie管理器中,模拟用户登入操作 1.在jmeter线程组-->配置文件---->HTTP

YJX_Driver_033_驱动中的内存管理

1. 驱动中的内存管理 A. 物理内存 B. 虚拟内存 C. Ring0地址和Ring3地址 D. 驱动程序和进程的关系 E. 分页和非分页内存 F. 分配内核内存 [120]了解两个概念:物理内存  虚拟内存 [140]以下概念针对 32位Windows操作系统(32位及以上的CPU)(32位 / 64位 CPU) [210]64位下的这些概念 略有区别 [240] “ A.物理内存:(Physical Memory Address) 目前主流的操作系统还是32位的XP,而32位的系统提供的寻

安卓中常用权限

安卓中常用权限 添加WiFi以及访问网络的权限:  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>  &l

微信内置浏览器中的cookie很诡异呀

微信内置浏览器中的cookie很诡异呀 这是设置和删除COOKIE的代码 function set_cookie($var ,$value = '' ,$expire = 0){ $path = '/'; $domain = 'aaa.com'; $auth = 'sadfsadfasdf'; if($value!='') $value = _myencrypt($value ,$auth); $var = '__abc_'.$var; if($expire==0){ $expire = 0;