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

沒有留言:

張貼留言