httpClient保持長會話

在移動開發中登入後常常碰到訪問接口被彈回登入,或者提示從新登入問題,其緣由在於訪問服務器的會話並不是一個。數據庫

解決辦法,使用同一個會話瀏覽器

//connManager, params分別是設置超時和初始化。服務器

 DefaultHttpClient  httpClient = new DefaultHttpClient(connManager, params); cookie

// 將uefEntity參數設置到post請求中post

httpPost.setEntity(uefEntity);ui

// 發送post請求,同時也將entity中的各參數發送過去,得到到響應對象spa

HttpResponse httpResponse = httpClient .execute(httpPost);
.net

若是這裏不手動關閉 httpClient 或者不被系統回收,那麼你就能夠一直使用這個httpClient而不被服務器攔截。firefox

這裏和網頁訪問服務器的原理基本一致,好比用firefox登入後在新打開一個窗口會保持登入狀態,而同一臺電腦的Goole瀏覽器打開同一連接倒是未登入狀態。這是由於訪問服務器的時候,服務器會根據訪問會話的cookie來斷定你是否能夠經過。對象

可是在Android端沒法控制系統回收,即便咱們將 httpClient設置爲 static類型任然會有數據丟失的時候,這時候咱們就會被逼的去從新登入。解決辦法  咱們經過設置httpClient的co'okie來使服務器知道,啊@這傢伙跟我有會話連接了,從而放行。

在剛剛 DefaultHttpClient  httpClient = new DefaultHttpClient(connManager, params); 的時候咱們經過httpClient.getCookieStore();是不對的你能夠用log打印下結果爲空,緣由不用說了吧,這個時候尚未跟服務器創建連接,

當httpClient .execute(httpPost);登入後咱們獲取的纔是 本次會話的cookie值,

List<Cookie> cookies = httpClient.getCookieStore().getCookies();

 咱們須要將獲取的cookies 進行持久化才能保證不會丟失。

將cookies持久化,不會的點進

 是使用SharedPreferences來保存)

http://blog.csdn.net/shimiso/article/details/39033353?utm_source=tuicool

http://blog.csdn.net/junjieking/article/details/7658551 ( 是使用數據庫來保存)

當系統或其餘異常致使會話中斷的時候咱們只需從持久化取出cookie設置到httpClient便可繼續訪問服務器 httpClient = new DefaultHttpClient(connManager, params); 

   httpClient.setCookieStore(cookieStore);

相關文章
相關標籤/搜索