android如何與asp.net服務端共用session

來源:互聯網
上載者:User

標籤:char   cep   status   tpc   字串   並儲存   request   null   hash   

近期需要實現一個功能,就是需要通過傳送簡訊進行註冊,現在想把簡訊驗證碼放到伺服器的session值中,當用戶端收到簡訊並提交簡訊碼時由asp.net服務端進行判斷,那麼如何共用這個session那麼需要在android用戶端中添加幾行代碼。如下操作。第一次資料請求時就擷取這個cookie的名稱並且得到這個cookie的值,這個即是sessionid的值並儲存在一個靜態變數中,然後在第二次請求資料的時候要將這個sessionid一併放在Cookie中發給伺服器,伺服器則是通過這個sessionid來識別究竟是那個用戶端在請求資料的,在asp.net中這個sessionid的名字叫做ASP.NET_SessionId,當然我們可以從程式中擷取,如下代碼:

//擷取服務端的這個sessionid的名稱

/* 擷取cookieStore */  
List<Cookie> cookies = cookieStore.getCookies();
for(int i=0;i<cookies.size();i++){
      String sessionid = cookies.get(i).getName(); 從這裡可以擷取到這個sessionid,即為 ASP.NET_SessionId 

}

擷取sessionid的值

for(int i=0;i<cookies.size();i++){ 

if("ASP.NET_SessionId".equals(cookies.get(i).getName())){
  JSESSIONID = cookies.get(i).getValue();  //這個即為sessionid的值
  break;
}

}

 

完整的httputils代碼如下:

public static DefaultHttpClient httpClient = null;

  private static String JSESSIONID; //定義一個靜態欄位,儲存sessionID  

   public static String getRequest(String url)

   {

   httpClient = new DefaultHttpClient(); 

   HttpGet get = new HttpGet(url); 

   try

   {

   HttpParams params = new BasicHttpParams();

       HttpConnectionParams.setConnectionTimeout(params, 10000);//設定連線逾時

       HttpConnectionParams.setSoTimeout(params, 15000);//佈建要求逾時

       get.setParams(params); 

       get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

       if(null != JSESSIONID){  

       get.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID);  

       }

       //串連響應,通過HttpResponse獲得響應資訊

   HttpResponse httpResponse = httpClient.execute(get);

   if(httpResponse.getStatusLine().getStatusCode() == 200)

   {

   //取得響應字串

   String result = EntityUtils.toString(httpResponse.getEntity());

   return result;

   }

   }

   catch (ClientProtocolException e) 

   { 

   return null;

   } 

   catch (IOException e) 

   { 

   return null;

   }

   return null;

   } 

   

   public static String postRequest(String url, HashMap<String, String> rawParams) throws Exception

   {

   httpClient = new DefaultHttpClient(); 

   //建立POST請求方式

   HttpPost post = new HttpPost(url);

   

   HttpParams cparams = new BasicHttpParams();

   

   HttpConnectionParams.setConnectionTimeout(cparams, 10000);//設定連線逾時

   HttpConnectionParams.setSoTimeout(cparams, 15000);//佈建要求逾時

   post.setParams(cparams); 

   post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

   if(null != JSESSIONID){  

   post.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID);  

       }

   //使用NameValuePair來儲存要傳遞的參數,可以使用BasicNameValuePair來構造一個要被傳遞的參數

   //通過add添加這個參數到NameValuePair中

   ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();

   for(String key : rawParams.keySet())

   {

   //添加要傳傳遞的參數 

   params.add(new BasicNameValuePair(key, rawParams.get(key)));

   }

   //post需要為參數設定字元集

   HttpEntity httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8); 

   //請求httpRequest

   post.setEntity(httpEntity);

   //發送POST請求並擷取響應

   HttpResponse  httpResponse = null;

   try

   {

      httpResponse = httpClient.execute(post);

   }

   catch(Exception ex)

   {

   String ee = ex.getMessage(); 

   }

   if(httpResponse.getStatusLine().getStatusCode() == 200)

   {

   String result = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);

   /* 擷取cookieStore

        ASP.NET_SessionId就是通過上面的方法擷取到。

      */  

           CookieStore cookieStore = httpClient.getCookieStore();  

           List<Cookie> cookies = cookieStore.getCookies(); 

           for(int i=0;i<cookies.size();i++){     

               if("ASP.NET_SessionId".equals(cookies.get(i).getName())){  

                   JSESSIONID = cookies.get(i).getValue();  

                   break;  

               }  

           }  

   return result;

   }

   return null;

   }

 

android如何與asp.net服務端共用session

相關文章

聯繫我們

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