下面要說的是網站中一個常見的功能,在客人使用抵用券或者其他來支付的時候需要驗證密碼,如果密碼輸入錯誤5次就鎖定,不在讓客人使用抵用券了,在這里是使用的cookie來實現的,不太嚴謹。
思路很簡單,在輸入密碼錯誤的時候,使用cookie保存2個變量,一個是標識當前客人是否已經被鎖定,這個只保存30分鍾,一個是記錄輸入錯誤次數,這個可以長時間保存。函數根據是否鎖定彈出相應的信息
if(輸入密碼錯誤)
{
if(鎖定標識為false)
{
保存出錯次數為1;
返回鎖定狀態為false;
}
else
{
取出出錯次數;
if(出錯次數小於5)
{
累加出錯次數並保存;
返回鎖定狀態為false;
}
else
{
保存鎖定狀態標識30分鍾;
設置出錯次數為0並保存;
返回鎖定狀態為true
}
}
}
else
{
返回鎖定狀態為false
}
function logInputFaile() { //var count = document.getElementById("userErrCoun").value; //var lockTim = document.getElementById("userPinLocTim").value; var uidErrCoun = document.getElementById("Userid").value + "userErrCoun"; var PinLoc = document.getElementById("Userid").value + "userPinLocTim"; var count = getCookie(uidErrCoun); var lockTim = getCookie(PinLoc); if (lockTim == null || lockTim == "") { //未鎖定 var expireDate = new Date(); expireDate.setTime(expireDate.getTime() + 24 * 60 * 60 * 1000); if (count == null || count=="") { //第一次輸入錯誤 setCookie(uidErrCoun, 1, expireDate.toGMTString(), "/"); return false; } else { var expireDate = new Date(); expireDate.setTime(expireDate.getTime() + 24 * 60 * 60 * 1000); var count = getCookie(uidErrCoun); if (count <= 5) { //出錯小於5次 setCookie(uidErrCoun, ++count, expireDate.toGMTString(), "/"); return false; } else { //大於5次,鎖定賬號 var expireDate = new Date(); expireDate.setTime(expireDate.getTime() + 30 * 60 * 1000); setCookie(PinLoc, "userPinLocTim", expireDate.toGMTString(), "/"); deleteCookie(uidErrCoun, "/"); return true; } } } else { return true; } }
這里很想說明一下設置cookie的過期時間,本來想找到一個類似於adddays()這樣的方法,但是javascript中沒有類似的方法,只有一個setTime,並且要和getTime搭配之用,其他的方法如setDate(day)是設置當前時間中的天,這個和我們的目的有點差別,一般我們想要設置當前這個cookie多長時間內過期,而不是在一個具體的時間點過期,所以大多數時間我們的思維是:保存用戶賬號50天,而不是從現在開始計算好50天,然后再當前時間基礎上設置天數為50,並且還要考慮50天之后是幾號,月份是多少,年份是多少,如果閏年就更麻煩了。
dateObject.getTime():getTime() 方法可返回指定的日期dateObject距 1970 年 1 月 1 日之間的毫秒數。
dateObject.setTime(millisec):setTime() 方法以時間據 GMT 時間 1970 年 1 月 1 日午夜之間的毫秒數設置 Date 對象。
所以只要獲取當前時間距離格林威治時間的毫秒數,再加上想要過期的時間的毫秒數,在使用setTime設置就可以得到正確的過期時間。
最后調用這個函數,如果返回true就證明鎖定了,彈出提示,為false證明未被鎖定。代碼如下: 方法中用到的工具方法setCookie和getCookie是javascript中讀寫cookie的包裝方法,原型請參考另外一篇隨筆 javascript讀寫cookie