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

作者:風柏楊
來源:CSDN
原文:https://blog.csdn.net/one_and_only4711/article/details/72577345

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

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

先來看一個流程圖:

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 點擊查看原文 Web SDK 開發手冊 SDK 概述 網易云信 SDK 為 Web 應用提供一個完善的 IM 系統...
    layjoy閱讀 13,890評論 0 15
  • 會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Se...
    chinariver閱讀 5,665評論 1 49
  • 4 創建一個社交網站 在上一章中,你學習了如何創建站點地圖和訂閱,并且為博客應用構建了一個搜索引擎。在這一章中,你...
    lakerszhy閱讀 2,206評論 0 7
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發此異常。 O...
    我想起個好名字閱讀 5,429評論 0 9
  • 在快節奏的現代社會里,如何更加有效率地生活成為人們追求的目標,有關時間管理的技巧也是五花八門,精彩紛呈。不同于其它...
    思考的樂趣閱讀 178評論 0 0