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

2021-09-24 05:51:41 字數 1546 閱讀 2138

這邊我們理想是使用localstorage去訪問使用者登入資訊,因為是儲存在客戶端本地,無需訪問伺服器,且可實現永久儲存,節省網路流量

關於cookie和session和storage的詳細解說**:

而登入的當前時間(具體到秒)+userid作為使用者的登入標識(本來想使用mac作為使用者登入的唯一標識,但這個似乎更快一點哈哈)

前提準備:

使用者資訊表中增加storage欄位用來儲存客戶端local資訊

流程:

當使用者登入時,生成local碼(自定義,userid+datetime.now.tostring())

驗證賬號密碼,如果無誤,將local碼更新至資料庫中storage欄位。

更新成功後,將此結果返回在ajax中。然後再客戶端判斷是否存在localstorage,具體**如下:

if (localstorage.getitem("userid") != null

&& localstorage.getitem("localstorage1") != null)

localstorage.setitem("userid", ay[0]);

localstorage.setitem("localstorage1", data);

window.location = 'main.html';

此時,如果另乙個使用者登入,執行上面步驟;

如何讓前乙個登入的使用者退出登入,並提醒呢?

我所想到的有兩種解決方式:

第一種(js時時訪問資料庫,查詢資料庫的storage欄位和本地localstorange欄位是否一致,不一致則提示並退出,但是這種方法會大大增加伺服器的壓力)

js中增加loginajax方法,方法中無疑就是ajax訪問資料庫,這邊就不寫出來了。

setinterval

$(function () );
settimeout(推薦) 

$(function () );

function exitlocal() ,

success: function (data) else

}});

}

下面附加為什麼選擇settime而不是setinterval的原因

主要原因是超時呼叫如果前面有執行緒阻擋,那麼會停下來,而間歇呼叫只按照規定的時間走,不會停,導致如果彈出框沒有理會它,到了時間後會繼續彈框,一直累加。

第二種(在使用者進行操作或者頁面重新整理時,訪問資料庫中storage欄位和本地localstorange欄位是否一致,不一致則提示並退出,相對於第一種,雖然響應上沒那麼時時,但是卻減緩了伺服器的壓力)

這邊思路已理出,**就不貼了,很容易就知道怎麼寫。

我這邊也很想知道有沒有更方便,更好的方法,希望能一起**一番

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

背景 功能像咱倆上同乙個qq號,你先上去了,然後我用同樣的號登陸,你的肯定就掉線了,就是這個功能.該方案只考慮了web伺服器為一台的情況.多台以後再寫一篇.思路 記錄使用者登陸資訊 登陸時間,使用者 id 每隔一段時間 如 5秒怎麼樣?檢查儲存的登陸資訊。如果發現多個,則比較各個的登陸時間,如果自己...

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

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

乙個簡單的struts登陸

剛開始學struts,以下是乙個是實現小的登入應用。第二,在myeclipse中建立乙個web專案 第三,建立乙個login.jsp登入介面 如下 第三,建立乙個顯示登入資訊的result.jsp頁面 如下 第四,就是要寫乙個loginaction類,放在包com.test.action裡,如下 第...