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) {      // cookies      mDatabase.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


更多相关文章

  1. SQlite Android数据库的应用 Android SQLite 简易的学生成绩管理
  2. android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---
  3. Room的使用以及数据库的升级
  4. android sqlite数据库的增删改查
  5. Android开发入门之数据库例子
  6. Android sqlite数据库存取图片信息
  7. android查询数据库获得手机里面所有的联系人

随机推荐

  1. android使用百度地图SDK获取定位信息
  2. adb(android debug bridge)命令
  3. Android(安卓)按键处理(驱动层到上层)架构
  4. 降低Android应用程序的耗电量
  5. android textview设置字体的行距
  6. Android中软键盘弹出时关于布局的问题
  7. Android使用WebView加载网页及数据
  8. Android(安卓)中文 API (101) ―― Async
  9. Android之网络连接判断
  10. [Android学习十一]Android开发单元测试