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=0i<headers.lengthi++)
{
String cookie=headers[i].getValue()
String[]cookievalues=cookie.split("")
for(int j=0j<cookievalues.lengthj++)
{
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 = 0i <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)
}
}
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109。它是网景公司的前雇员Lou Montulli在1993年3月的发明。用途:服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。Cookie 的用途之一是存储用户在特定网站上的密码和 ID。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将要求阁下的网络浏览器利用阁下计算机硬驱上的少量空间来储存这些首选项。这样,每次阁下登录该网站时,阁下的浏览器将检查阁下是否就该唯一的服务器有任何预先定义的首选项(cookie)。如果有的话,浏览器将此 cookie 随阁下对网页的请求一起发送给服务器。Microsoft 和 Netscape 使用 cookie 在其网站上创建个人起始页。各家公司利用 cookie 的一般用途包括:在线定货系统、网站个人化和网站跟踪。网站个人化是 cookie 最有益的用途之一。例如,当谁来到 CNN 网站,但并不想查看任何商务新闻。网站允许他将该项选为选项。从那时起(或者直到 cookie 逾期),他在访问 CNN 网页时将不会读到商务新闻。 cookie 只是为了更好地了解使用模式并改进网站访客的效率而采用的一个网站跟踪统计手段而已。 如果网站设计师旨在使网页能与访客更具互动作用,或者若设计师计划让访客自定义网站的外观,则就需要使用 cookie。而且,如果阁下想要网站在某些情况下改变其外观,cookie 则提供了一条快速、容易的途径,让阁下的 HTML 页面按需要而改变。最新型的服务器使用 cookie 有助于数据库的互动性,进而改进网站的整体互动性。为了保证上网安全我们需要对Cookie进行适当设置。打开“工具/Internet选项”中的“隐私”选项卡(注意该设置只在IE6.0中存在,其他版本IE可以在“工具/Internet选项”的“安全”标签中单击“自定义级别”按钮,进行简单调整),调整Cookie的安全级别。通常情况,可以将滑块调整到“中高”或者“高”的位置。多数的论坛站点需要使用Cookie信息,如果你从来不去这些地方,可以将安全级调到“阻止所有Cookies”。如果只是为了禁止个别网站的Cookie,可以单击“编辑”按钮,将要屏蔽的网站添加到列表中。在“高级”按钮选项中,你可以对第一方Cookie和第三方的Cookie进行设置,第一方Cookie是你正在浏览的网站的Cookie,第三方Cookie非正在浏览的网站发给你的Cookie,通常要对第三方Cookie选择“拒绝”。你如果需要保存Cookie,可以使用IE的“导入导出”功能,打开“文件/导入导出”,按提示 *** 作即可。
cookie方法:一、华为手机2.首先找到华为手机上的浏览器,点击进入浏览器之后,就可以看到右下角的三点。3.点击进入之后,选择设置然后看到高级选项栏,选择网站设置,选择cookies进入即可查看。二、苹果手机1.打开手机设置,点击Safari浏览器。2.下拉到最底部,点击高级,在高级窗口中,点击网站数据。3.进入网站数据后,就可以看到之前浏览网页留下来的Cookie数据了。Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)