怎樣實現同一個賬戶同一時間只能在一個終端登錄

不少系統都希望實現同一個賬戶同一時間只能在一個地方登錄,如騰訊QQ,當你的賬戶在另一個終端登錄後,之前正在登錄訪問的終端會被強制下線,這樣做的好處我認爲有兩點:1)能提高系統/網站的安全性,比如說如果你在操作過程中被擠下線了,你便能馬上察覺到賬戶和密碼已經泄露,要馬上修改密碼或聯繫管理員凍結賬戶;2)能減少系統的開銷,因爲每個登錄的終端都需要耗費服務器資源,登錄的用戶,Session佔用的空間也會大些,如果賬戶做了只能在一個終端登錄後,其他終端的登錄會話所佔用的資源能及時得到釋放,有利於節省寶貴的服務器資源,此外,如果不做這個限制,有可能會被惡意攻擊的人利用這個問題來消耗服務器資源,這樣可能對服務器的性能產生很大的影響。


那怎樣才能實現單終端登錄限制呢?下面來介紹一下我的實現思路,希望能幫助到有同樣需求的小夥伴,有異議的朋友也歡迎留言交流。


先來看一個流程圖:


在賬戶表的基礎上,我新建了一個賬戶account_session表,用來記錄登錄賬戶的account_id和最新一次登錄成功用戶的session_id,然後首先要修改登錄方法:每次登錄成功後,要將登錄用戶信息寫入Session的同時還要更新account_session表裏相應賬戶的session_id(當然,如果是第一次登錄時,進行的便是插入動作),然後要修改獲取當前用戶信息的方法,在裏面要做兩重判斷,首先,看當前會話是否存在登錄用戶信息,如果沒有,則肯定是未登錄,不再贅述,如果有,還要再進一步要用當前會員裏存的account_id去account_session表查詢最新的session_id,與當前會員中的session_id作比較,如果是一致的,說明當前會話是最新的會話,登錄狀態正常,如果不一致,說明在當前登錄會話創建後,被新的登錄會話覆蓋掉了,當前的登錄會話已經失效,這時候,服務器應該刪除當前的登錄會話並返回提示給客戶端,至此,限制賬戶同一時間單終端登錄功能便實現了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章