背景:
功能像咱倆上同乙個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作為使用者登入的唯一標識,...