防止同一使用者同時登陸的實現 單WEB服篇

2021-04-18 22:14:42 字數 1534 閱讀 7834

背景:

功能像咱倆上同乙個qq號,你先上去了,然後我用同樣的號登陸,你的肯定就掉線了,就是這個功能.

該方案只考慮了web伺服器為一台的情況.多台以後再寫一篇.

思路

記錄使用者登陸資訊

[登陸時間,使用者

id]

每隔一段時間(如

5秒怎麼樣?)檢查儲存的登陸資訊。如果發現多個,則比較各個的登陸時間,如果自己用的登陸時間比其他的早,則提示並登出。

實現:

1.把所有登陸使用者存在這個全域性

中(建議把這個

放在基類,方便呼叫):

protected

ilist

logininfo

return (ilist

} }

datetime

dt = datetime.now;

//這裡儲存當前使用者的登陸狀態,儲存登陸資訊,此處偽**,儲存可以用session儲存使用者實體類,下面會用到.

session[「userinfo」] = user.getuserinfobyuname(username, ref error);

session[「lastlogindate」].lastlogindate = dt;

//這裡把該使用者名稱與登陸時間存到登陸使用者列表中:

ilist

al = new

arraylist();

//這裡我加的是使用者名稱,因為這裡是用使用者名稱做主鍵的,其實用int更好.如果你是用int做使用者主鍵,請用userid.

al.add(txtusername.text);

al.add(dt);

logininfo.add(al);

頁面裡增加指令碼,每隔一段時間(

5秒)取一下狀態,看看這個使用者名稱是不是在其他地方登陸了,這裡用到了

prototype

的ajax:

指令碼中用到了乙個頁面

leadnt.aspx,

第一次呼叫返回乙個值,如果是

1 ,則表示別人登陸這個帳號了,第二次呼叫,是用這個頁面來登出當前使用者:

leadnt.aspx

中的部分**:

//第一次呼叫: if

(request.querystring["op"] == "otherlogin")

} }

}

//第二次呼叫

if (request.querystring["op"] == "logout")

這裡呼叫

logon.aspx

是登出當前使用者。

這樣就實現了單使用者登陸功能。當乙個帳號同時登陸

2次時,第一次會被刷下。

總結:

本文詳細介紹了如何防止用一使用者同時登陸。

此方案經我實驗,100%可靠.

防止同一使用者同時登入

從網上看到的文章。覺得很不錯,可以一試。先複製過來以備後用。要防止同一使用者同時登陸,在這裡使用乙個cache存放已經登陸的使用者名稱,但是還有乙個問題就是要知道使用者是什麼時候離開 系統的呢?這就要定期清除cache中的內容了,也就是設定乙個cache的時間。這個時間可以跟使用者的session值...

如何限制同一使用者名稱同時登陸

這個問題我的辦法是,使用者有個活躍時間間隔問題。超過這個活躍時間間隔的則可以認為是離線,後者可以登陸 如果無後者登陸,但並不是說前者就需要重新登陸了。因為他的session還在的。只能是這個時間設定的越小越精確,也是不能做到絕對的。貼出來給樓主參考下。程式設計客棧 rsprv.close infot...

web端同一賬戶同時登陸踢掉前乙個登入的使用者

這邊我們理想是使用localstorage去訪問使用者登入資訊,因為是儲存在客戶端本地,無需訪問伺服器,且可實現永久儲存,節省網路流量 關於cookie和session和storage的詳細解說 而登入的當前時間 具體到秒 userid作為使用者的登入標識 本來想使用mac作為使用者登入的唯一標識,...