My application allows a number of different users to be defined and currently a user can sign into the system, with the same account details, a number of times. I need to change this so that any one user can only ever be logged in once.
So I was hoping that I could apply an application lock for each logged in user and check the status of the lock when attempting to sign in. I don't want the system to hang if the lock is already in place so I was trying to use the applock_test to check the status of the lock before trying to apply it.
The problem I have is that the applock test always returns 1 even if the lock is in place.
Am I doing something wrong? Is the better way to achieve this?
The code is wrapped in FoxPro but looks like this:
* test the lock for the provided UserID
w_chklock = g_ocsdb.ExecSQL("SELECT applock_test('public','" + ALLTRIM(UPPER(p_userid)) + "', 'Exclusive', 'Session')")
IF w_chklock > 0
* if the lock is available to grant lock it exclusively
w_chklock = g_ocsdb.ExecSQL("EXEC sp_getapplock '" + ALLTRIM(UPPER(p_userid)) + "', 'Exclusive', 'Session',0")
w_userct = 0
* the lock is not available warn the user they cannot get in
w_userct = 1