所謂“單用戶單賬戶登錄”是指:在同一系統中,一個用戶名不能在兩個地方同時登錄。
我們參照 QQ 實現效果:當某賬號在 A 處登錄后,在未退出的情況下,如果再到 B 處登錄,那么,系統會擠下 A 處登錄的賬號。
要實現這樣一個功能,如果我們項目使用了springmvc我們可以使用攔截器來替代過濾器,否則我們使用過濾器也可以實現,我們需要一個這樣的東西來進行攔截用戶的請求。我們的user表里也需要添加一個token字段,用於存放當前登錄者的一個唯一標識。
大致的思路是這樣的:
用戶A請求123這個賬號登陸,登陸成功后生成一個唯一token存入123這個對象的token里,並把這個user對象放入session中,最重要的是別忘記更新這個用戶的表記錄。如果這時用戶B也請求登陸123賬號,同樣的我們也在登陸成功后生成要給唯一token存入123這個對象的token里,並把這個user對象放入session中,最重要的是別忘記更新這個用戶的表記錄。現在的情況是有兩個用戶在兩個地點登陸了同一個賬號123,那么此時如果用戶A向服務器發送了一個請求他想要去查看個人資料,我們的攔截器就要開始工作了,可以說整個單用戶登陸的重點都在這個攔截器里面,在攔截器里面我們去獲取session中保存的user對象,此時我們要明白當前這個user對象里的token標記着的是用戶A,而數據庫里真實token的數據已經在用戶B登陸后被修改了,標記着的是用戶B,我們根據這個條件用session中的user對象和數據庫中的user去進行比較判斷token是否相同就可以實現單用戶登陸這個功能了,如果相同說明是同一個用戶,否則就說明有其他人在其他地方登陸了,需要清除掉當前session中的user去退出當前這個賬號即可。