如何維持APP用戶的登陸狀態


一。一種方式

原文鏈接:http://ciniao.legu.cc/appcan/article_54.html

 

這個問題太過於常見,也過於簡單,以至於大部分開發者根本沒有關注過這個問題,我根據和我溝通的開發者中,總結出來常用的方法有以下幾種:

 (個人覺得不簡單么)

一:服務端默認的session

這種方式最大的優點是服務端不用增加任何代碼,但APP與網站不同,通常情況下,我們會希望APP的登陸狀態能維持數天,甚至數月之久,大部分的服務端程序,都會在進程重啟時或客戶端多久不活動時,將session全部清空,致使狀態丟失

 

二、在客戶端記錄登陸用戶的用戶名和密碼

客戶端在登陸時,判斷如果服務端返回驗證成功,則將用戶名和密碼(為了客戶端安全起見,可以將password多次md5)保存到本地的localStorage中,然后每次HTTP請求時,將用戶名和密碼帶到參數中,服務端每次都需要讀取數據庫判斷合法性,會浪費一定的服務器資源,同時,因為密碼保存到本地,帶來了一定的安全風險。

 

三:借助於數據庫或文件系統等維持持久狀態

這種方式,是為了解決方法一中session不持久的問題(如:將session保存的位置修改到文件或數據庫),以及方案二中的安全性問題,不過這會降低服務端性能,或浪費服務端資源,代碼邏輯流程如下:

數據庫中,除了常見的user,password之外,額外增加一個字段,如:sessionID

在登陸接口中,如果判斷用戶輸入的用戶名密碼正確時,生成一個隨機字符串,保存到sessionID中,同時,客戶端也將該值保存,在每次請求時,傳遞該值,服務端通過該值查詢數據庫,取得用戶的身份信息。

 

四:密鑰方式

以上三種方法,要么不能持久保存狀態,要么不安全,要么每次請求都需要讀取數據庫驗證,有沒有一種方法,能解決以上的缺陷呢,於是,就有了這個方法,流程如下:

 

1:客戶端輸入用戶名和密碼,提交到服務端驗證

2:服務端驗證成功后,給客戶端返回以下值:

uid : 用戶的唯一標示

time : 當前unix時間戳

key : MD5(uid+time+"一個只有你自己知道的字符串密鑰")

3:客戶端保存以上3個值在本地,每次HTTP請求時,將以上3個值發送到服務端

4:服務端驗證key,判斷如果與客戶端發送的key一致,則說明用戶身份無誤

5:服務端每次收到請求時,通過當前時間-客戶端time字段得到的差值,可以控制這個key的有效期

 二。類似第三方登錄的方式

 OAuth2.0的refresh token

或者微信公眾平台的方式:

http://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html

三。app  利用memcached 保持登錄

http://www.zhihu.com/question/29714299

http://www.blogjava.net/stevenjohn/archive/2013/04/03/397372.html

http://ask.dcloud.net.cn/article/157

四。安全角度:從安全和體驗上解析移動App的登錄

不過個人建議你長期保持登陸

這樣安全性不好

最好是 自動登錄~提供自動登錄

至於session機制,也是需要服務器后台設置時長的。

http://baike.baidu.com/view/3858474.htm

http://tech.it168.com/j/2006-07-19/200607191220593_2.shtml

哎,失誤了,不用考慮后台該考慮的事情了。

2015/12/03

1.app端與server端的心跳包:長鏈接,適合TCP/IP

http方式,后台session的自動延續,session設置超時時間,到期自動延續。app端不會出現session過期。

2.Image的蒙層效果。

實現點擊圖片(ImageView)變暗效果,有一個較簡單的方法,就是將目標圖片設置為背景圖片(setBackground),再創建一個selector.xml文件,里面放置一張普通狀態時的透明圖片,一張點擊狀態下的棕色半透明圖片,將其設置為ImageView的源圖片。這樣在點擊ImageView時,源圖片會變換透明度,達到變暗效果。但這種方法有個缺點:由於源圖片已經被限制死了,假如我們需要自定義背景圖片,將目標圖片放置在背景圖片上,就無法實現了。

多用一個ImageView控件,半透明背景的,放在目標ImageView的上面,點擊的時候換另一種透明度背景的。這個方法用了兩層

還可以通過濾鏡和監聽onTouchEvent事件來達到變暗效果的方法。關於濾鏡,以后接觸


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM