Introduction
This article will teach us about Stored Procedure For Login Pages and Custom Error Handling.
This is a continuation of the previous article in which we used a generic handler to generate a CAPTCHA image.
I have added many columns to the introductory UserMaster Table to integrate a standard login policy.
| # | Column | DataType | Function |
| 1 | IsLocked | Varchar(1) | If the user attempts to log in with the wrong password five times, then the user account is locked ('Y': Unlocked, 'N': Locked) |
| 2 | IsLogin | Bit | This flag states the User's Login Status |
| 3 | LoginCnt | Int | Count of login attempts with an invalid password |
| 4 | UserSession | Varchar(200) | This is the user's unique session id |
| 5 | LastLogin | DateTime | DateTime of the last Login |
| 6 | IsActive | Bit | User Account Status |
Step 1. Prepare Table structure

Set the Key/Constraint on the Table on the LoginID column since it must be unique.

Step 2. Stored Procedure
CREATE PROCEDURE [dbo].[USP_UserLogin]
@loginID VARCHAR(25) ,
@password VARCHAR(200),
@sessionID VARCHAR(200),
@mode VARCHAR(15)
AS
BEGIN
IF @mode = 'LOGIN'
BEGIN
-- USER NOT EXISTS
IF NOT EXISTS( SELECT 1
FROM tbl_UserMaster
WHERE LoginID = @loginID AND IsDelete = 0 )
BEGIN
SELECT 'USER NOT EXISTS.' AS RES
RETURN;
END
-- USER INACTIVE
IF EXISTS ( SELECT 1
FROM tbl_UserMaster
WHERE LoginID = @loginID
AND IsActive = 0 )
BEGIN
SELECT 'USER INACTIVE.' AS RES
RETURN;
END
-- USER LOCKED
IF EXISTS ( SELECT 1
FROM tbl_UserMaster
WHERE LoginID = @loginID
AND IsLocked = 'Y' AND IsActive = 1 AND IsDelete = 0 )
BEGIN
SELECT 'USER LOCKED.' AS RES
RETURN;
END
-- PASSWORD CHECK
IF NOT EXISTS ( SELECT 1
FROM tbl_UserMaster
WHERE LoginID = @loginID
AND [Password] = @password
AND IsActive = 1 AND IsDelete = 0 )
BEGIN
-- UPDATE INCORRECT LOGIN ATTEMPT
UPDATE tbl_UserMaster
SET LoginCnt = ISNULL(LoginCnt,0) + 1
WHERE LoginID = @loginID
-- IF INCORRECT LOGIN ATTEMPT MORE THAN 5 TIMES THEN LOCK USER ACCOUNT
IF((SELECT LoginCnt FROM tbl_UserMaster WHERE LoginID = @loginID ) > 5 )
BEGIN
UPDATE tbl_UserMaster
SET IsLocked = 'Y'
WHERE LoginID = @loginID
END
SELECT 'PASSWORD INCORRECT.' AS RES
END
ELSE
BEGIN
SELECT UserID ,UserName ,LoginID ,LastLogin ,UserRole ,IsLogin
FROM tbl_UserMaster
WHERE LoginID = @loginID
AND [Password] = @password
AND IsActive = 1 AND IsDelete = 0
-- UPDATE USER LOGIN DETAILS
IF ( (SELECT IsLogin FROM tbl_UserMaster
WHERE LoginID = @loginID AND [Password] = @password AND IsActive = 1 AND IsDelete = 0 ) = 0 )
BEGIN
UPDATE tbl_UserMaster
SET IsLogin = 1 ,
userSession = @sessionID ,
LastLogin = GETDATE()
WHERE LoginID = @loginID
END
END
END
ELSE IF @mode = 'CHANGELOGIN'
BEGIN
UPDATE tbl_UserMaster
SET IsLogin = 1 ,
userSession = @sessionID ,
LastLogin = GETDATE()
WHERE LoginID = @loginID
END
END 







Karthik PuppalaPosted Jul 21, 2014, 9:36 AM
Dose the user get signed out when user close the browser without signing out.