這邊我們理想是使用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裡,如下 第...