Android使用者操作web後台登入後擷取cookie安全通行證認知

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   io   os   使用   java   

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

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

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

package http.demo; import org.apache.commons.httpclient.*;import org.apache.commons.httpclient.cookie.*;import org.apache.commons.httpclient.methods.*;  /**  * 用來示範登入表單的樣本  * @author Liudong  */public class FormLoginDemo {   static final String LOGON_SITE = "localhost" ;   static final int     LOGON_PORT = 8080;    public static void main(String[] args) throws Exception{      HttpClient client = new HttpClient();      client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);       // 類比登入頁面 login.jsp->main.jsp      PostMethod post = new PostMethod( "/main.jsp" );      NameValuePair name = new NameValuePair( "name" , "ld" );      NameValuePair pass = new NameValuePair( "password" , "ld" );      post.setRequestBody( new NameValuePair[]{name,pass});      int status = client.executeMethod(post);      System.out.println(post.getResponseBodyAsString());      post.releaseConnection();       // 查看 cookie 資訊      CookieSpec cookiespec = CookiePolicy.getDefaultSpec();      Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, "/" , false , client.getState().getCookies());      if (cookies.length == 0) {         System.out.println( "None" );      } else {         for ( int i = 0; i < cookies.length; i++) {            System.out.println(cookies[i].toString());         }      }       // 訪問所需的頁面 main2.jsp       GetMethodget=newGetMethod("/main2.jsp");      client.executeMethod(get);      System.out.println(get.getResponseBodyAsString());      get.releaseConnection();   }}

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

Android使用者操作web後台登入後擷取cookie安全通行證認知

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.