Android如何使用读写cookie的方法

Android如何使用读写cookie的方法

可以使用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&lt;Cookie&gt; cookies = httpclient.getCookieStore().getCookies();          if (entity != null) {              entity.consumeContent();          }                  if (cookies.isEmpty()) {            Log.i(TAG, "NONE");         } else {             for (int i = 0; i &lt; 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);          }}
时间: 2024-11-14 09:16:28

Android如何使用读写cookie的方法的相关文章

c#.net与vb.net中读写Cookie的方法!

Cookie (HttpCookie的实例)提供了一种在 Web 应用程序中存储用户特定信息的方法.例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息.当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息. C#.net部分 创建Cookie方法 (1)Response.Cookies["userName"].Value = “admin";Response.Cookies[“userName”].Expires = DateTime.No

Android注入事件的三种方法比较

方法1:使用内部APIs 该方法和其他所有内部没有向外正式公布的APIs一样存在它自己的风险.原理是通过获得WindowManager的一个实例来访问injectKeyEvent/injectPointerEvent这两个事件注入方法. IBinder wmbinder = ServiceManager.getService( "window" ); IWindowManager m_WndManager = IWindowManager.Stub.asInterface( wmbin

Monkey源码分析番外篇之Android注入事件的三种方法比较

原文:http://www.pocketmagic.net/2012/04/injecting-events-programatically-on-android/#.VEoIoIuUcaV 往下分析monkey事件注入源码之前先了解下在android系统下事件注入的方式,翻译一篇国外文章如下. Method 1: Using internal APIs 方法1:使用内部APIs This approach has its risks, like it is always with intern

Android文件的读写

Android的文件读写与JavaSE的文件读写相同,都是使用IO流.而且Android使用的正是JavaSE的IO流,下面我们通过一个练习来学习Android的文件读写. 1.创建一个Android工程 Project name:File BuildTarget:Android2.2 Application name:文件读写 Package name:com.jbridge.file Create Activity:DateActivity Min SDK Version:8 strings

JAVA中如何读写COOKIE

Java中删除cookie Cookie[] cookies=request.getCookies(); //cookies不为空,则清除 if(cookies!=null) { String value=cookies[0].getName(); //查找用户名 if(value.equals("userName")) { cookies[0].setMaxAge(0); response.addCookie(cookies[i]); } } Java中如何读写cookie //写c

Android数据存储的五种方法汇总

本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种: 使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置

js读写Cookie问题(Cookie存储时长、Cookie存储域)汇总

在采集网站用户行为数据/使用js对用户行为做交互时,经常会使用到Cookie,了解Js Cookie的读写,以及一些细节,非常重要.   什么是Cookie 所谓Cookie,只是一条极为短小的信息,它被浏览器自动地放置在访问用户的电脑硬盘中. 例如:C:\Users\[user]\AppData\Roaming\Microsoft\Windows\Cookies 如上图所示,打开的一个文件里面,标示了一个域下多个Cookie的信息. 检测/判断浏览器是否支持Cookie 在绝大多数浏览器中,可

探讨android更新UI的几种方法

作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现,自己越来越消极怠工,只是在无意义的敲代码,敲的还是网上抄来的代码,如果不行,继续找. 这就是项目进度没有规划好而导致的. 最近在做有关蓝牙的项目,一开始的进度都安排得很顺利,但是因为测试需要两部手机,而且还要是android手机,暑假已经开始了,同学们都回家了,加上我手机的蓝牙坏了,导致我的进度严重被打乱!而

二十四、Android文件的读写

Android的文件读写与JavaSE的文件读写相同,都是使用IO流.而且Android使用的正是JavaSE的IO流,下面我们通过一个练习来学习Android的文件读写. 1.创建一个Android工程 [html] view plaincopy Project name:File BuildTarget:Android2.2 Application name:文件读写 Package name:test.file Create Activity:DateActivity Min SDK Ve