??我們在使用App時,一次登錄后App如果不主動退出登錄或者清除數(shù)據(jù),App會在很長一段時間內(nèi)保持登錄狀態(tài),或者讓用戶感覺到登錄一次就不用每次都輸入用戶密碼才能進行登錄。
??銀行、金融涉及到支付類的App一般不支持這種長時間的登錄狀態(tài)保持。對于保持長期登錄的技術實現(xiàn)方式,除了和前端技術有關,還涉及到前后臺的通訊連接方式、后臺提供的服務方式等有關。比如前端App是前端技術是原生加H5實現(xiàn)的,那選擇的技術可能和純原生的不一樣。還有如果后端使用了sso(單點登錄方式)技術那就和后端使用了webservice、Socket的方式不一樣,具體實現(xiàn)上有時候需要綜合考慮。總結(jié)出來一般的登錄保持功能有如下的實現(xiàn)方式:
一、利用Cookie機制實現(xiàn)
??我們知道cookie是為了解決http無狀態(tài)的一種技術,被電商、oa等web應用廣泛使用。如果我們的App和后端通訊采用的http通訊方式,可以利用cookie技術進行登錄狀態(tài)保持。比如我們可以把sessionID和有效期保存在cookie中,發(fā)給前端App,前端App收到后保存在本地。當訪問后端服務把sessionID和有效期作為參數(shù)傳給后臺進行認證。直到sessionID失效,用戶都不需要重新登錄。
二、用戶名和密碼
??如果App和后端通信不是通過http協(xié)議進行的,那cookie機制可能就不太適合。利用用戶名和密碼保持登錄是指用戶在第一次登錄成功時,把用戶名和密碼保存的本地,下次用戶打開App時登錄利用保存的用戶名和密碼在后臺自動完成。這種方式需要考慮用戶名和密碼的安全問題,防止信息被破解。
三、token方式
??token方式在app認證上用的比較普遍,App初始登錄時,提交賬號和密碼數(shù)據(jù)給服務端,服務端根據(jù)定義的的策略生成一個token字符串,token字符串中可以包含用戶信息、設備ID等信息以保證用戶的唯一性。服務端并對token設置一定的期限。服務端把生成的token字符串傳給客戶端,客戶端保存token字符串,并在接下來的請求中帶上這個字符串。相對于在App本地token的安全性更高了。
App登錄狀態(tài)保持除了實現(xiàn)路徑外還需要考慮服務端數(shù)據(jù)持久化問題、客戶端防拷貝問題、攔截破解問題等,在使用中需要綜合考慮。
四、密鑰方式
??以上三種方法,要么不能持久保存狀態(tài),要么不安全,要么每次請求都需要讀取數(shù)據(jù)庫驗證,有沒有一種方法,能解決以上的缺陷呢,于是,就有了這個方法,流程如下:
1:客戶端輸入用戶名和密碼,提交到服務端驗證
2:服務端驗證成功后,給客戶端返回以下值:
uid : 用戶的唯一標示
time : 當前unix時間戳
key : MD5(uid+time+"一個只有你自己知道的字符串密鑰")
3:客戶端保存以上3個值在本地,每次HTTP請求時,將以上3個值發(fā)送到服務端
4:服務端驗證key,判斷如果與客戶端發(fā)送的key一致,則說明用戶身份無誤
5:服務端每次收到請求時,通過當前時間-客戶端time字段得到的差值,可以控制這個key的有效期