当前位置: 首页 > 编程日记 > 正文

Android如何使用读写cookie的方法

http://www.cnblogs.com/cosiray/archive/2012/06/25/2562117.html

可以使用SharedPreferences或者SQLite来保存用户信息

private static HashMap<String,String>  CookieContiner=new HashMap<String,String>() ;/*** 保存Cookie* @param resp*/public void SaveCookies(HttpResponse httpResponse){Header[] headers = httpResponse.getHeaders("Set-Cookie");String headerstr=headers.toString();if (headers == null)return;for(int i=0;i<headers.length;i++){String cookie=headers[i].getValue();String[]cookievalues=cookie.split(";");for(int j=0;j<cookievalues.length;j++){String[] keyPair=cookievalues[j].split("=");String key=keyPair[0].trim();String value=keyPair.length>1?keyPair[1].trim():"";CookieContiner.put(key, value);}}}/*** 增加Cookie* @param request*/public void AddCookies(HttpPost request){StringBuilder sb = new StringBuilder();Iterator iter = CookieContiner.entrySet().iterator();while (iter.hasNext()) {Map.Entry entry = (Map.Entry) iter.next();String key = entry.getKey().toString();String val = entry.getValue().toString();sb.append(key);sb.append("=");sb.append(val);sb.append(";");}request.addHeader("cookie", sb.toString());} 


做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录。找了好多资料。发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有太多资料。


先来看一下如何读取cookie吧:

try{DefaultHttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet("http://www.hlovey.com/");HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();List<Cookie> cookies = httpclient.getCookieStore().getCookies();if (entity != null) {entity.consumeContent();}if (cookies.isEmpty()) {Log.i(TAG, "NONE");} else {for (int i = 0; i < cookies.size(); i++) {             Log.i(TAG,"- domain " + cookies.get(i).getDomain());Log.i(TAG,"- path " + cookies.get(i).getPath());Log.i(TAG,"- value " + cookies.get(i).getValue());Log.i(TAG,"- name " + cookies.get(i).getName());Log.i(TAG,"- port " + cookies.get(i).getPorts());Log.i(TAG,"- comment " + cookies.get(i).getComment());Log.i(TAG,"- commenturl" + cookies.get(i).getCommentURL());Log.i(TAG,"- all " + cookies.get(i).toString());}}httpclient.getConnectionManager().shutdown();}catch(Exception e){//Todo}finally{//Todo         }

通过分析com.android.browser的源码,发现android默认的browser增加cookie是在数据库中增加记录,和window不同,win是采用一个txt文本文件的形式来存储cookie。而android是将cookie存储在数据库中。具体的介绍在《android cookie存储位置》一文中有介绍。我们都知道,android每个应用程序的存储空间都是独立的。不管使用preference还是database存储,都会在每个/data/data/package name/下面进行存储(preference存储在/data/data/package name/shared_prefs/xxxx.xml)。前面也说到cookie是存在数据库中,那么如果采用非浏览器访问网络需要保留cookie的话我们就应该在database中建立cookies表,并且存入相应的cookies数据。仿照默认broswer的代码:

/**声明一些数据库操作的常量*/private static SQLiteDatabase mDatabase = null;private static final String DATABASE_FILE = "webview.db";private static final String COOKIES_NAME_COL = "name";private static final String COOKIES_VALUE_COL = "value";private static final String COOKIES_DOMAIN_COL = "domain";private static final String COOKIES_PATH_COL = "path";private static final String COOKIES_EXPIRES_COL = "expires";private static final String COOKIES_SECURE_COL = "secure";
mDatabase = LoginApiActivity.this.openOrCreateDatabase(DATABASE_FILE, 0, null);
//创建cookie数据库if (mDatabase != null) {// cookiesmDatabase.execSQL("CREATE TABLE IF NOT EXISTS cookies "+ " (_id INTEGER PRIMARY KEY, "+ COOKIES_NAME_COL + " TEXT, " + COOKIES_VALUE_COL+ " TEXT, " + COOKIES_DOMAIN_COL + " TEXT, "+ COOKIES_PATH_COL + " TEXT, " + COOKIES_EXPIRES_COL+ " INTEGER, " + COOKIES_SECURE_COL + " INTEGER" + ");");mDatabase.execSQL("CREATE INDEX IF NOT EXISTS cookiesIndex ON "+ "cookies" + " (path)");}}/*写cookie*/public void addCookie(Cookie cookie) {if (cookie.getDomain() == null || cookie.getPath() == null || cookie.getName() == null|| mDatabase == null) {return;}String mCookieLock = "asd";synchronized (mCookieLock) {ContentValues cookieVal = new ContentValues();cookieVal.put(COOKIES_DOMAIN_COL, cookie.getDomain());cookieVal.put(COOKIES_PATH_COL, cookie.getPath());cookieVal.put(COOKIES_NAME_COL, cookie.getName());cookieVal.put(COOKIES_VALUE_COL, cookie.getValue());mDatabase.insert("cookies", null, cookieVal);}
}

Android AsyncHttpClient登录保存cookie和读写cookie

参考:http://blog.csdn.net/jdsjlzx/article/details/44700965


相关文章:

js 创建一条通用链表

js 创建一条通用链表什么是「链表科普」&#xff1f;链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。什么是「顺序存储结构科普」&#xff1f;在计算机中用一组地址连续的存储单元依次存储线性表的各个数据…

预训练时代微调新范式,高性能加速2800%,NLPer赶紧看过来!

导读PaddleNLP 是兼具科研学习和产业实践能力的 Python NLP 工具包&#xff0c;提供中文领域丰富的预训练模型和部署工具&#xff0c;被高校、企业开发者广泛应用。近日&#xff0c;PaddleNLP v2.1正式发布&#xff0c;为开发者带来三项重要更新&#xff1a;开箱即用的工业级NL…

图片服务器的url hash架构

什么是urlhash架构 url hash架构对url进行一次hash算法&#xff0c;然后通过hash结果找到对应的服务器。因为针对单一个url的hash结果是一样的&#xff0c;所以理论上这个url会被永久分配到固定的一台服务器上。另外因为经过了hash算法&#xff0c;所以分配url就很均匀&#xf…

Android系统--TouchEvent的处理流程

TouchEvent的处理流程就是TouchEvent在View树中的传递的过程&#xff1a;这个过程分为2步&#xff1a;第一步&#xff0c;ACTION_DOWN在View树中寻找处理TouchEvent的View;第二步&#xff0c;剩余的ACTION_XXX在View树传递给目标View; 第一步&#xff0c;ACTION_DOWN在View树中…

搜索引擎中的URL散列

散列&#xff08;hash&#xff09;也就是哈希&#xff0c;是信息存储和查询所用的一项基本技术。在搜索引擎中网络爬虫在抓取网页时为了对网页进行有效地排重必须对URL进行散列&#xff0c;这样才能快速地排除已经抓取过的网页。最理想的状态是对联网上所有的网页都分配一个哈希…

c++各种数据类型表示范围

符号属性 长度属性 基本型 所占位数 取值范围 输入符举例 输出符举例 -- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%usigned -- char 8 -2^7 ~ 2^7-1 %c …

原来Python用得好,工作这么好找

Python是多数平台上写脚本和快速开发应用的编程语言&#xff0c;适用场景非常广&#xff0c;Web开发、大数据分析、机器学习、自动化运维/测试&#xff0c;甚至日常工作中的各种各样的问题都能用Python来解决。Python不仅可以批量处理上百个Excel、Word、PDF文件&#xff0c;工…

Litmus代码质量平台实践总结

背景代码质量在项目开发中是一个很重要的地方&#xff0c;更好的质量的代码&#xff0c;能够产生更少的bug&#xff0c;也能使开发人员更不容易犯错&#xff0c;产品的质量得到提升。那么怎么定义代码质量&#xff0c;怎么测量以及如何展现就成为我们内部平台Litmus的主要探索领…

到底什么是hash?它起什么作用?

从emule诞生到现在也已经有了两年左右时间了&#xff0c;随着emule的普及&#xff0c;喜欢他的人也越来越多&#xff0c;但是由于emule对技术相应有一个门槛&#xff0c;不像bt那么容易上手&#xff0c;所以很多朋友很长时间以来一直都有这样或那样的疑问&#xff0c;今天是周末…

20个精美图表,教你玩转 Pyecharts 可视化

作者 |俊欣来源 |关于数据分析与可视化本篇文章我们将继续聚焦c模块并且用它来绘制精美的图表&#xff0c;希望读者在看完之后会有不少收获01内嵌饼状图内接一个环状的饼图&#xff0c;里面还有一个饼状的图(Pie().add(series_name"访问来源",data_pair[list(z) for …

【SICP练习】136 练习3.67

练习3-67 原文 Exercise 3.67. Modify the pairs procedure so that (pairs integers integers) will produce the stream of all pairs of integers (i,j) (without the condition i < j). Hint: You will need to mix in an additional stream. 代码 (define (all-pairs s…

glibc方式安装mysql

下载安装包 mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz创建mysql用户useradd -r mysql -s /sbin/nologin解压文件tar -zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz -C /opt/改名mv /opt/mysql-5.6.38-linux-glibc2.12-x86_64/ /opt/mysql-5.6创建数据目录mkdir /data更…

淘宝网7年变化图--建议非美工UED人员也看看

从2003年开始&#xff0c;这么几年间淘宝网首页截图&#xff0c;UED美工和开发人员都可以看看。图片来自www.infoq.com网站 的PPT

Github 一夜爆火:这份金九银十 Java 面试手册我给跪了

这几天给筒子们整理了一份《Java面试手册》&#xff0c;106页&#xff0c;目前大约6万字左右&#xff0c;初衷也很简单&#xff0c;就是希望在面试的时候能够帮助到大家&#xff0c;减轻大家的负担和节省时间。废话不多说&#xff0c;本手册目前为第一版&#xff0c;后续慢慢也…

a different object with the same identifier value was already associated with the session

当出现a different object with the same identifier value was already associated with the session时&#xff0c;一般是因为在hibernate中同一个session里面有了两个相同标识但是是不同实体。 我直接将接受需要比较的id的list<ab>换成了list<object[]>,再直接将…

【转】unity3d 在UGUI中制作自适应调整大小的滚动布局控件

转自 http://blog.csdn.net/rcfalcon/article/details/43459387 在游戏中&#xff0c;我们很多地方需要用到scroll content的概念&#xff1a;我们需要一个容器&#xff0c;能够指定布局方式&#xff08;比如横排排列、竖排排列、网格排列&#xff09;等。然后我们向其中填充内…

(转)径向模糊效果shader

转自&#xff1a;http://blog.csdn.net/xoyojank/article/details/5146297 最先在这里看到:http://www.gamerendering.com/2008/12/20/radial-blur-filter/ 这效果在鬼泣4中切换场景时见过, 极品飞车12的运动模糊也有这种感觉. 原理: 确定一个中心点(如0.5, 0.5), 跟当前像素连…

初次体验hiphop-php

facebook在github上发布了hiphop-php的源代码。之前听说这玩意能把php代码翻译成c代码&#xff0c;然后带来巨大的性能提升&#xff0c;所以第一时间编译了一份hiphop-php。 我的机器环境是 Centos 5.3 x86_648G内存Intel(R) Xeon(R) CPU E5420 2.50GHz 安装注意事项 编译…

MySQL之父等国际数据库掌门人齐聚,1024 程序员节全体大会重磅官宣!

10月23-24日&#xff0c;由CSDN、长沙市政府及多家机构联合主办的第二届“长沙中国1024程序员节”&#xff08;1024.csdn.net&#xff09;将盛大举行。今年程序员节活动囊括&#xff1a;岳麓书院尖峰对话&#xff0c;2021技术英雄会&#xff0c;9场热门技术主题论坛/专场、第16…

通过yum安装配置lamp

1、安装httpdyum install httpd创建测试文件cd /var/www/htmlvim index.php加入以下内容<html><head><title>PHP Page</title></head><body><h1>PHP start</h1> <?phpphpinfo(); ?><h1>PHP end</h1> <…

PHP“Cannot use object of type stdClass as array”

php再调用json_decode从字符串对象生成json对象时&#xff0c;如果使用[]操作符取数据&#xff0c;会得到下面的错误错误&#xff1a;Cannot use object of type stdClass as array产生原因&#xff1a;展开 -PHP$res json_decode($res);$res[key]; //把 json_decode() 后的对…

RMAN_学习笔记1_RMAN Structure概述和体系结构

2014-12-23 Created By BaoXinjian 一、摘要 是一种用于集备份(backup)、还原(restore)和恢复(recover)数据库于一体的Oracle 工具&#xff0c;支持命令行及图形界面操作 能够备份整个数据库、表空间、数据文件、控制文件、归档文件以及Spfile参数文件。 支持增量数据块级别的备…

全球缺芯大潮中,以软代硬能否另辟蹊径?

在5G和人工智能的技术浪潮如约而至以后&#xff0c;业内人士无不对IoT产业的未来报以极大的期待。以人工智能和家居设备为基础&#xff0c;再加上算力与网络支持&#xff0c;有理由相信未来IoT相关产业必将迎来爆发。然而今年&#xff0c;席卷全球的芯片产能不足问题影响到了各…

Xtrabackup实现数据的备份与恢复

Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件&#xff0c;它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份&#xff08;对于MyISAM的备份同样需要加表锁&#xff09;&#xff1b;mysqldump备份方式是采用的逻辑备份&#xff0c;其最大的缺陷是备份…

最简单的CI框架入门示例--数据库取数据

这个写给初学者看&#xff0c;这是最简单可以调通的例子&#xff0c;网上很多例子其实初学者本地跑不通&#xff0c;缺这少那。 1.下载CI框架&#xff08;自己找&#xff09;2.配置 database.php配置&#xff1a; 为数据库服务器设置 connection 参数&#xff1a; $db[defau…

ST-GCN 实现人体姿态行为分类

作者 | 李秋键 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 引用 人体行为识别是计算机视觉及机器学习方面的热门研究领域。它在对视频中的人类行为进行运动分析、行为识别乃至延伸至人机交互领域都有着非常广泛的应用。研究初期&#xff0c;人体行为识别主要是以…

【原创】Kakfa utils源代码分析(三)

Kafka utils包最后一篇~~~ 十五、ShutdownableThread.scala可关闭的线程抽象类&#xff01; 继承自Thread同时还接收一个boolean变量isInterruptible表明是否允许中断。既然是可关闭的&#xff0c;因此一定不是守护线程&#xff0c;而是一个用户线程(不会阻塞JVM关闭)。提供的方…

Oracle的分页查询

为什么80%的码农都做不了架构师&#xff1f;>>> 因为Oracle不像MySQL一样有limit函数来实现分页查找&#xff0c;oracle要实现分页查询可使用关键字rownum来处理。使用rownum有以下几点需要注意&#xff1a; 1、ROWNUM存在使用规则&#xff0c;在单个子查询中&…

微软成功抵御峰值高达 2.4Tbps 的 DDoS 攻击

整理 | 祝涛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;微软表示&#xff0c;他们成功抵御了一场发生于8月份的2.4Tbps分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;这次攻击超过了去年针对亚马逊Web服务的2.3Tbps最大攻击。这场攻击持续…

百度吴甜:首席AI架构师培养计划持续为行业输送高端复合型AI人才

CSDN 导语&#xff1a; 随着 AI 技术的发展&#xff0c;关注 AI 的开发者与日俱增&#xff1a;据 CSDN 发布的《中国 AI 应用开发者报告》显示&#xff0c;在 CSDN 的注册开发者中&#xff0c;689 万开发者有阅读、撰写和研究 AI 技术行为&#xff0c;其中精准聚焦 AI 学习和应…