編輯:關於Android編程
HttpClient 與 HttpURLConnection 共用 SessionId
HttpClient 與 HttpUrlConnection 是Android 中HTTP操作最常見的訪問方式。在一個應用程序中有時候會用到這兩種方式,如何能讓他們共用Cookie,讓客戶端訪問服務器保持Session進行通信。
針對httpClient 和HttpUrlConnection 獲取和發送Cookie,主要是sessionID的共享。
httpClient獲取及發送Session 值:
HttpPost httpPost = new HttpPost(url); // 將SessionId發給服務器 if(null != mSESSIONID){ httpPost.setHeader("Cookie", "SESSIONID=" + mSESSIONID); } DefaultHttpClient httpClient = new DefaultHttpClient(); httpResponse = httpClient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity entity = httpResponse.getEntity(); CookieStore mCookieStore = httpClient.getCookieStore(); Listcookies = mCookieStore.getCookies(); //這裡是讀取指定Cookie 的值 for (int i = 0; i < cookies.size(); i++) { if ("SESSIONID".equals(cookies.get(i).getName())) { mSESSIONID = cookies.get(i).getValue(); break; } } }
在程序中保存上面的sessionId ,或用全局變量,或者SharedPreferences 保存,看這個sessionId 的會話時間及程序業務。
HttpURLConnection url_con = null; URL url = new URL(reqUrl); url_con = (HttpURLConnection) url.openConnection(); //設置session if (mSESSIONID!= null) { url_con.setRequestProperty("Cookie","JSESSIONID="+mSESSIONID); } ... String cookieVal =con.getHeaderField("Set-Cookie"); // 獲取session if (cookieVal != null) { StringmSESSIONID= cookieVal.substring(0, cookieVal.indexOf(";")); }
private void enableHttpResponseCache() { try { long httpCacheSize = 10 * 1024 * 1024; // 10 MiB File httpCacheDir = new File(getCacheDir(), "http"); Class.forName("android.net.http.HttpResponseCache") .getMethod("install", File.class, long.class) .invoke(null, httpCacheDir, httpCacheSize); } catch (Exception httpResponseCacheNotAvailable) { } }你也應該同時配置一下你的Web服務器,在HTTP響應上加入緩存的消息頭。
本來不想寫這些基礎中的基礎,但是想想這些內容雖然用不到,但需要做這樣的了解和學習,也是概念性的居多,理解至上。不過還是不多說,就講兩個部分吧。一。系統架構這次的沒有Xm
Android的硬件抽象層,簡單來說,就是對Linux內核驅
在上一篇中我們介紹了基於DragonBoard 410c的Debian開發。並且通過UART口登錄到了Debian中的Shell,實現了基本的控制台應用。本文主要是針對安
接觸微信支付之前聽說過這是一個坑,,,心裡已經有了准備。。。我以為我沒准跳坑出不來了,沒有想到我填上了,調用成功之後我感覺公司所有的同事都是漂亮的,隔著北京的大霧霾我仿佛