Android 分析android 客戶端保持session 不過期的方式

首先要知道session和cookie,session是存在服務器的的用來區分不同的會話的,是一種服務器機制,cookie 是客戶端登陸服務器以後,服務器需要爲某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求裏是否包含了一個session標識-稱爲session id,如果已經包含一個session id則說明以前已經爲此客戶創建過session,服務器就按照session id把這個session檢索出來使用.如果客戶請求不包含session id,則爲此客戶創建一個session並且生成一個與此session相關聯的session id,這個session id將在本次響應中返回給客戶端保存。

一般開源框架都會把這個session_id 存貯在cookie中,注意這個session_id是會話的標識。不要直接明文存儲。

迴歸正題,客戶端登錄時,將用戶名,密碼加密存貯在本地。同時將將cookie(或者session_id)保存起來,下次訪問服務器是,把它帶上,服務器端就能識別你已經登陸過了,但是我們知道服務器的session 是有時間限制的,默認是如果客戶端20分鐘以內沒有訪問服務器,這個session_id就過期了,在服務器端不存在了,但是客戶端可能還認爲自己沒有掉線。怎麼解決這個問題呢?
方案1、將session 設置成擁擠不過期,這樣確實可以解決客戶端的session 過期的問題,但是不推薦。這樣服務器端session一直不銷燬,會佔用內存,越來越來越多。
方案2.心跳機制。這是最常見的客戶端保持會話不過期的方法。簡單的做法就是寫個定時器,美隔幾分鐘發送廣播,收到廣播後收客戶端去訪問服務器。當然也有問題。這個方式。舉個例子說下他的問題吧。比如雖然寫了個定時器去訪問服務器,但是如果這段時間(假如30分鐘),客戶端正好把網絡給關了,31分鐘後客戶端又打開了網絡連接,由於30分鐘沒有訪問服務器 你調用A()方法的時候返回的結果是{“error”:"login"},然後你根據結果再去調用B() 登陸方法,登陸成功後,在自動A()方法。這樣的話,每次訪問網絡都要更這個B()登陸方法,代碼臃腫。而且費電。
方法3:服務器自動登登陸的方法
客戶端訪問服務器事,同時帶着用戶名,和密碼,還有cookie(session_id),服務器先判斷session_id 是否過期,如果過期,在判讀參數中有用戶名和密碼,如果有,就在調用一下登錄的方法,登錄成功後,就接着操作。。這種方法的缺點就是每次都要帶個賬號和密碼,稍微有點耗流量。
原文地址:http://www.th7.cn/Program/Android/201502/392240.shtml
發佈了54 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章