Android與後台資料互動學習

來源:互聯網
上載者:User

標籤:

摘要 任何系統在沒有使用者登入就可操作資料是非常危險的,連結用戶端與伺服器的是使用者登入後的session,使用者登入系 統後存在一個sessionid,這個sessionid就是用戶端的cookie,用戶端擷取到sessionid設定cookie後就可以發起任意的 HTTP伺服器請求了。

HTTP 用戶端編程中最常碰見的問題,很多網站的內容都只是對註冊使用者可見的,這種情況下就必須要求使用正確的使用者名稱和口令登入成功後,方可瀏覽到想要的頁面。因 為HTTP協議是無狀態的,也就是串連的有效期間只限於當前請求,請求內容結束後串連就關閉了。在這種情況下為了儲存使用者的登入資訊必須使用到Cookie 機制。以JSP/Servlet為例,當瀏覽器請求一個JSP或者是Servlet的頁面時,應用伺服器會返回一個參數,名為jsessionid(因不 同應用伺服器而異),值是一個較長的唯一字串的Cookie,這個字串值也就是當前訪問該網站的會話標識。瀏覽器在每訪問該網站的其他頁面時候都要帶 上jsessionid這樣的Cookie資訊,應用伺服器根據讀取這個會話標識來擷取對應的會話資訊。

       對於需要使用者登入的網站,一般在 使用者登入成功後會將使用者資料儲存在伺服器的會話中,這樣當訪問到其他的頁面時候,應用伺服器根據瀏覽器送上的Cookie中讀取當前請求對應的會話標識以 獲得對應的會話資訊,然後就可以判斷使用者資料是否存在於會話資訊中,如果存在則允許訪問頁面,否則跳轉到登入頁面中要求使用者輸入帳號和口令進行登入。這就 是一般使用JSP開發網站在處理使用者登入的比較通用的方法。

         這樣一來,對於HTTP的用戶端來講,如果要訪問一個受保護的頁面時就必須模 擬瀏覽器所做的工作,首先就是請求登入頁面,然後讀取Cookie值;再次請求登入頁面並加入登入頁所需的每個參數;最後就是請求最終所需的頁面。當然在 除第一次請求外其他的請求都需要附帶上Cookie資訊以便伺服器能判斷當前請求是否已經通過驗證。說了這麼多,可是如果你使用httpclient的 話,你甚至連一行代碼都無需增加,你只需要先傳遞登入資訊執行登入過程,然後直接存取想要的頁面,跟訪問一個普通的頁面沒有任何區別,因為類 HttpClient已經幫你做了所有該做的事情了,太棒了!下面的例子實現了這樣一個訪問的過程。

 1 package http.demo;  2 import org.apache.commons.httpclient.*; 3 import org.apache.commons.httpclient.cookie.*; 4 import org.apache.commons.httpclient.methods.*;  5    6 /**  7  * 用來示範登入表單的樣本  8  * @author Liudong  9  */10 public class FormLoginDemo {11    static final String LOGON_SITE = "localhost" ;12    static final int     LOGON_PORT = 8080;13   14    public static void main(String[] args) throws Exception{15       HttpClient client = new HttpClient();16       client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);17   18       // 類比登入頁面 login.jsp->main.jsp19       PostMethod post = new PostMethod( "/main.jsp" );20       NameValuePair name = new NameValuePair( "name" , "ld" );21       NameValuePair pass = new NameValuePair( "password" , "ld" );22       post.setRequestBody( new NameValuePair[]{name,pass});23       int status = client.executeMethod(post);24       System.out.println(post.getResponseBodyAsString());25       post.releaseConnection();26   27       // 查看 cookie 資訊28       CookieSpec cookiespec = CookiePolicy.getDefaultSpec();29       Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/" , false , client.getState().getCookies());30       if (cookies.length == 0) {31          System.out.println( "None" );32       } else {33          for ( int i = 0; i < cookies.length; i++) {34             System.out.println(cookies[i].toString());35          }36       }37   38       // 訪問所需的頁面 main2.jsp 39       GetMethodget=newGetMethod("/main2.jsp");40       client.executeMethod(get);41       System.out.println(get.getResponseBodyAsString());42       get.releaseConnection();43    }

參考:http://my.oschina.net/u/218583/blog/42923

 

Android與後台資料互動學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.