1.單點登錄:
單點登錄是登錄之后 所有該域名的網站都可以不用登錄了把 包括子域名。
單點登錄是從一個系統登錄以后,其他地方不用登錄。。。
- 所有應用系統共享一個身份認證系統。
統一的認證系統是SSO的前提之一。認證系統的主要功能是將用戶的登錄信息和用戶信息庫相比較,對用戶進行登錄認證;認證成功后,認證系統應該生成統一的認證標志(ticket),返還給用戶。另外,認證系統還應該對ticket進行效驗,判斷其有效性。 - 所有應用系統能夠識別和提取ticket信息
要實現SSO的功能,讓用戶只登錄一次,就必須讓應用系統能夠識別已經登錄過的用戶。應用系統應該能對ticket進行識別和提取,通過與認證系統的通訊,能自動判斷當前用戶是否登錄過,從而完成單點登錄的功能。

- 統一的認證系統並不是說只有單個的認證服務器,如下圖所示,整個系統可以存在兩個以上的認證服務器,這些服務器甚至可以是不同的產品。認證服務器之間要通過標准的通訊協議,互相交換認證信息,就能完成更高級別的單點登錄。如下圖,當用戶在訪問應用系統1時,由第一個認證服務器進行認證后,得到由此服務器產生的ticket。當他訪問應用系統4的時候,認證服務器2能夠識別此ticket是由第一個服務器產生的,通過認證服務器之間標准的通訊協議(例如SAML)來交換認證信息,仍然能夠完成SSO的功能。
2.單一登錄,單賬號單ip登錄策略:
用是Cache.Insert(key(用戶名),value(用戶名),時間為(session.Timeout));
if(Cache["key"]==用戶名)
response.write(己經登錄)
我說一個比較普遍的做法,我看過很多就是這么干的
其實可以這樣的,用一個Application存儲一個Table
Table里記錄username,sessionid,time
那么在正式登陸之前就檢查這個Table就可以了
用戶退出,可以根據這個Table移除記錄,session timeout可以根據sessionid移除記錄
服務器中斷了 Application也就沒了...這個思路應該可以幫你解決
放在服務器緩存中就可以。再次登錄的時候判斷當前用戶列表中有沒有,有的話,說明已經登錄。
如果樓主說的一機一號的機制,那么可以直接綁定用戶首次登錄的IP地址,將用戶的IP地址綁定在數據庫中,每次登錄的時候判斷IP是否正確。如用戶是IP是自動獲取的話,那么就綁定用戶的硬件串口號。
要做成QQ那種形式的話可以在數據庫中加字段來表明,帳號是否屬於登錄的狀態。
用緩存+session控制,如果緩存存在 則不讓另外地方登錄
每次登錄都自動更新一次隨機密碼, 也就是在用戶表中 usrId usrName usrPass usrRanPass 用戶每次登錄后把隨機密碼記錄 Cookie 或 session 中 (包括用戶ID),然后 每次刷新頁面的時候 用UsrId與 UsrRanPass 與數據庫進行對比。如果 隨機密碼不同則退出。。。也可以設為定時對比。
webform? 登錄的時候提取一個sessionID 保存在數據庫里 ajax和服務器保持聯絡..檢測服務器上的登錄記錄..當另一個用戶登錄的時候數據庫的sessionID就會被現在登錄的用戶生存的sessionID替換掉..那當ajax和服務器通信時匹配數據庫里的sessionID不同時就提示...
據說sessionID是唯一的...實在不行就用guid生成一個也一樣...不知道有沒有說錯
系統中一個LoginSession表(sessionId,UserId,ip,expireDate)
登錄成功后,檢查單點登錄策略,如果當前是不允許多個地方登錄,那么就清空LoginSession中當前UesrId的記錄。同時,把當前Session記錄起來,同時返回一個token{sessionId,userId}給客戶端。
每次和服務端的請求,都要到LoginSession中校驗這個token,看是否存在(被踢啦),是否過期(expireDate),是否被限定的Ip地址。
如果Ok的話,修改expireDate,再延遲20分鍾之類
上述接近方案,可以實現 踢人,限定Ip,登錄超時的問題