2019年12月31日 星期二
由預存程序判斷登入錯誤次數及鎖定時間
CREATE PROC Login_OP @SerialNo varchar(13),@IDNO char(10), @passwd char(32),@ErrorChk char(1) ,@RetryTimes int,@LockTime int,@errcnt int output, @RemainderTime int output ,@LogIP varchar(50),@LogIPXFORWARD varchar(50),@LogIPREMOTEADD varchar(50),@MachineName varchar(30)
AS
DECLARE @PAGE VARCHAR(50)
DECLARE @timediff int
DECLARE @pswd char(32)
DECLARE @isfirstlogin char(1) --取得是否已首次登入
DECLARE @MSG varchar(200)
SET @PAGE='Index.aspx-' + @MachineName
SELECT @pswd=password,@isfirstlogin=IsFirstLogined,@errcnt=Errcnt, @timeDiff=isnull(DATEDIFF(second, LastErrorDate,getdate()),0) FROM StudentWish where SerialNo=@SerialNo AND IDNO=@IDNO
/*無此帳號*/
IF @@ROWCOUNT= 0
BEGIN
SET @RemainderTime= -1
SET @Errcnt = -1
SET @MSG='無此帳號:' + @SerialNo + '/' + @IDNO
EXEC InsertLogTab @SerialNo,@PAGE,@LOGIP,@LogIPXFORWARD,@LogIPREMOTEADD,'無此帳號'
RETURN
END
/*判斷該帳號是目前是否達鎖定次數/是否已過鎖定時間 */
IF @Errcnt>=@RetryTimes AND @timediff <@LockTime --未過鎖定時間,回傳尚剩等待幾秒
BEGIN
SET @RemainderTime=@LockTime - @timediff
SET @MSG='鎖定狀態中,剩 ' + Convert(varchar(3),@RemainderTime) + ' 秒'
EXEC InsertLogTab @SerialNo,@PAGE,@LOGIP,@LogIPXFORWARD,@LogIPREMOTEADD,@MSG
RETURN
END
/* 已過鎖定時間,需解除,並設等待秒數 為 0 */
SET @RemainderTime=0
--IF @Errcnt >=@RetryTimes AND @timediff >@LockTime --若錯了3 次,隔一天再試,也應RESET 為 0
IF @timediff >@LockTime --若錯了3 次,隔了十分鐘再試,也應RESET 為 0
SET @Errcnt=0
/* 底下驗證密碼 */
IF @pswd<>@passwd
BEGIN
UPDATE StudentWish SET ErrCnt=@ErrCnt+1 ,LastErrorDate=getDate() WHERE SerialNo=@SerialNo AND IDNO=@IDNO
SET @MSG='帳密有誤,錯誤次數 ' + Convert(varchar(2),@ErrCnt+1)
EXEC InsertLogTab @SerialNo,@PAGE,@LOGIP,@LogIPXFORWARD,@LogIPREMOTEADD,@MSG
RETURN
END
/*密碼正確*/
IF @isfirstlogin <>'Y' --首次登入
UPDATE [StudentWish] SET ErrCnt=0,FirstLoginedDate=getDate(),IsFirstLogined='Y' WHERE SerialNo=@SerialNo
IF @Errcnt <>0 --有錯誤再更新
UPDATE StudentWish SET ErrCnt=0 WHERE SerialNo=@SerialNo AND IDNO=@IDNO
SET @MSG='登入成功'
EXEC InsertLogTab @SerialNo,@PAGE,@LOGIP,@LogIPXFORWARD,@LogIPREMOTEADD,@MSG
SELECT StudName,Sex,TypeNo,IsUP3,IsConsent,IsJoinReview,IsJoinExam,IsConfirm from [StudentWish] WHERE IDNO=@IDNO and SerialNo=@SerialNo and Password=@passwd
GO
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言