Android持久化保存cookie


在解析網頁信息的時候,需要登錄后才能訪問,所以使用httpclient模擬登錄,然后把cookie保存下來,以供下一次訪問使用,這時就需要持久化cookie中的內容。

在之前先科普一下基礎知識:

什么是Cookies?

Cookies 是一些小文件,它們被創建在客戶端的系統里,或者被創建在客戶端瀏覽器的內存中(如果是臨時性的話)。用它可以實現狀態管理的功能。我們可以存儲一些少量 信息到可以短的系統上,以便在需要的時候使用。最有趣的事情是,它是對用戶透明的。在你的web應用程序中,你可以到處使用它,它極其得簡單。 Cookies是以文本形式存儲的。如果一個web應用程序使用cookies,那么服務器負責發送cookies,客戶端瀏覽器將存儲它。瀏覽器在下次 請求頁面的時候,會返回cookies給服務器。最常用的例子是,使用一個cookie來存儲用戶信息,用戶的喜好,“記住密碼”操作等。Cookies 有許多優點,當然也有許多缺點。我將在接下來講述。

Cookies是如何創建的?

當 一個客戶端向服務器發出請求,服務器發送cookies給客戶端。而相同的cookies可以被后續的請求使用。例如,如果 codeproject.com將Session ID作為cookies存儲。當一個客戶端首次向web服務器請求頁面,服務器生成Session ID,並將其作為cookies發送往客戶端。


現在,所有來自相同客戶端的后續請求,它將使用來自cookies的Session ID,就像下面這幅圖片展示的那樣。


 

瀏覽器和web服務器以交換cookies信息來作為響應。對不同的站點,瀏覽器會維護不同的cookies。如果一個頁面需要cookies中的信息,當某個URL被“點擊”,首先瀏覽器將搜索本地系統的cookies的信息,然后才轉向服務器來獲得信息。

Cookies的優勢

下面是使用cookies的主要優勢:

(1)    實現和使用都是非常簡單的

(2)    由瀏覽器來負責維護發送過來的數據(cookies內容)

(3)    對來自多個站點的cookies來講,瀏覽器自動管理它們

Cookies的劣勢

下面是cookies的主要劣勢:

(1)    它以簡單的文本格式來存儲數據,所以它一點也不安全

(2)    對於cookies數據,有大小限制(4kB)

(3)    Cookies最大數目也有限制。主流瀏覽器提供將cookies的個數限制在20條。如果新cookies到來,那么老的將被刪除。有些瀏覽器能支持到300條的cookies數。

(4)    我們需要配置瀏覽器,cookies將不能工作在瀏覽器配置的高安全級別環境下。

什么是持久化的和非持久化的Cookies

我們可以將cookies分成兩類:

(1)    持久化的cookies

(2)    非持久化的cookies

持久化的cookies:這可以被稱為永久性的cookies,它被存儲在客戶端的硬盤內,直到它們失效。持久化的cookies應該被設置一個失效時間。有時,它們會一直存在直到用戶刪除它們。持久化的cookies通常被用來為某個系統收集一個用戶的標識信息。

非持久化cookies:也可以被稱之為臨時性的cookies。如果沒有定義失效時間,那么cookie將會被存儲在瀏覽器的內存中。我上面展示的例子就是一個非持久的cookies。

修改一個持久化的cookies與一個非持久化的cookies並沒有什么不同。它們唯一的區別是——持久化的cookies有一個失效時間的設置。

Cookie持久化

HttpClient 可以和任意物理表示的實現了CookieStore接口的持久化cookie存儲一起使用。默認的CookieStore實現稱為 BasicClientCookie,這是憑借java.util.ArrayList的一個簡單實現。在BasicClientCookie對象中存儲 的cookie當容器對象被垃圾回收機制回收時會丟失。如果需要,用戶可以提供更復雜的實現。

 

下載着重介紹在安卓中如何利用httpclient來實現對cookie的持久化操作:

 

一、請求網絡獲取cookie

先看一下下面的代碼:

[java] view plain copy
  1. DefaultHttpClient httpclient = new DefaultHttpClient();  
  2. HttpGet httpget = new HttpGet("http://www.hlovey.com");  
  3. HttpResponse response = httpclient.execute(httpget);  
  4. HttpEntity entity = response.getEntity();  
  5. List<Cookie> cookies = httpclient.getCookieStore().getCookies();  //執行了請求后才會有cookie

Post模擬登錄

[java] view plain copy
    1. HttpPost httpPost = new HttpPost(url);  
    2. List<NameValuePair> formparams = new ArrayList<NameValuePair>();  
    3. formparams.add(new BasicNameValuePair("id", userid));  
    4. formparams.add(new BasicNameValuePair("passwd", passwd));  
    5. UrlEncodedFormEntity entity;  
    6. try {  
    7.     entity = new UrlEncodedFormEntity(formparams, mobileSMTHEncoding);  
    8. catch (UnsupportedEncodingException e1) {  
    9.     return 3;  
    10. }  
    11. httpPost.setEntity(entity);  
    12. httpPost.setHeader("User-Agent", userAgent);  
    13. HttpResponse response = httpClient.execute(httpPost); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM