2016-10-22 92 views
0

我對處理保持用戶登錄應用程序的最佳方式有疑問。我想知道如何實現與Snapchat等應用程序類似的功能,即使在用戶關閉/打開手機時也能保持用戶登錄狀態。我是否認爲他們在設備上本地存儲授權密鑰以達到此目的?我從來不想登錄用戶,除非他們點擊「註銷」按鈕,但我沒有使用授權密鑰的經驗,以保持人們登錄。這種驗證/登錄用戶的方法是否安全?

所以我想知道如果下面的方法將是一個很好的方法使用,或者如果它不安全/將採取什麼更好的方法。 首先,我在我的數據庫中有一個表格,內容如下: device_id,用戶名,密碼,logged_in。

我目前的方法:

  • 當應用程序啓動時,獲取設備的唯一ID。
  • 使用Javascript/php將ID發送到數據庫。
  • 使用SQL檢查數據庫中的ID。
  • 如果ID不在數據庫中,或者,如果與該ID相關聯的「logged_in」列表示「0」(表示未登錄),那麼這意味着它是新設備/並且可能是新用戶或用戶當前從該設備註銷(由於在前一個會話結束時按下「註銷」按鈕 - 「註銷」按鈕將「logged_in」列更改爲「0」)。
  • 因此,該應用程序現在向用戶提供輸入登錄詳細信息(用戶名&密碼)的選項,或註冊應用程序(創建用戶名&密碼)。
  • 如果這些進程是成功的,數據庫更新,並且用戶可以使用的應用程序(以下簡稱「LOGGED_IN」一欄被改成「1」 - 這意味着用戶登錄)。
  • 每當用戶打開應用程序,如果他們的ID在數據庫中,並且關聯的「logged_in」列=「1」,則不需要登錄屏幕,他們已經登錄並且可以立即訪問應用程序。
  • 如果某人在一臺設備上登錄其帳戶,但獲取了新設備並登錄該設備(使用其用戶名和密碼),則其存儲的設備ID將被其新設備ID覆蓋。 - 這應該使它們顯示在他們自己的設備上(因爲他們的舊ID不會被發現,所以他們會被提示重新輸入他們的用戶名和密碼,如果他們回到他們的舊手機)。

這是一個穩定和安全的方法來驗證用戶的詳細信息,並保持人們登錄到應用程序?他們仍然能夠通過按下「註銷」按鈕註銷他們,他們會將「logged_in」列從「1」更改爲「0」。但是這種方法可能存在缺陷?我真的很感激任何建議,最好的方式來做到這一點。提前致謝!

回答

0

設備的唯一ID將通過互聯網。如果有一個節點監聽您的通信,它將獲得設備的所有唯一ID,因此您需要對它們進行加密,所以如果數據以任何方式被第三方收聽,至少不會把他們的原始數據交給他們另外,我會使用一個醃製的加密程序,所以即使第三方能夠對算法進行逆向工程,結果也遠沒有真正的價值。我會選擇一個離散名稱,這對第三方來說並不意味着什麼。

通常情況下,沒有用於登錄狀態的標誌,相反,當用戶正確登錄時,某些值存儲在$_SESSION中,如user_id。一般來說,客戶端爲此目的使用cookie,並且您可以通過Javascript修改cookie值。如果這不適合你,那麼你不必使用一般的方法,但是永遠不要在沒有模糊的情況下發送獨特的設備id。

相關問題