Re: [PHP-DB] Automatic logoff

[email protected] (Richard Quadling)
Newsgroups php.db
Message-ID <[email protected]>
2010/1/27 listread <[email protected]>:
> Chris,
>
> Yes, I can see how your suggestion would be good for approximating the
> length of a visit, but my issue is more specific and technical...
>
> We will have users updating database records.  We want to lock a record
> while it is being worked on and release it once the user is finished or
> otherwise leaves the site.
>
> That's why we want a graceful exit.
>
> Maybe I should start a new thread about locking db records?
>
> - Ron
>
> On 1/26/2010 4:03 PM, Chris wrote:
>>
>> listread wrote:
>>>
>>> Bruno,
>>>
>>> Thanks for the heads up on the php configuration.  I'll check that out.
>>>
>>> We also need to write some data to a database, things like logout time.
>>>  That means running a script for some other php code.
>>
>> There are probably a number of situations where the onUnload thing won't
>> work including browser crashes, some browsers may not support it, will it
>> work if you have multiple browser tabs open and close one (something you'll
>> have to research) etc, so be aware that you're not going to get this 100%
>> right.
>>
>> If you just want the timing, I'd do it the other way.
>>
>> Each time their session is checked (on page load), update the "end" time.
>> In db terms:
>>
>> update session set logout_time=NOW() where session_id='X';
>>
>> That way you're always going to get at least an idea of how long their
>> session lasts but you won't get "reading time" on the page (ie it takes me 2
>> mins to read something on the page, the logout_time will be 2 minutes before
>> I actually close it).
>>
>
>
> --
> PHP Database Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

The technique I've used in the past is semaphore locking, where the
semaphore contains the session and the expected expiry time.

Follow this.

User a starts the process of editing a record.
Set the semaphore where there is :
  a - no existing semaphore - no ongoing edits.
  b - the semaphore's session is the same - repeat edits by this user
in the same session (expired or otherwise).
  c - the semaphore has expired - the other user simply took too long.

If the semaphore cannot be set it will be because of :
  d - Different non expired session - someone else is editing the record.

When a user saves the row, you just remove the semaphore.

The semaphores could be in a separate table (rather than on the record itself).

Different tables have different number of columns so take different
amounts of time to edit, so each table would have a different amount
of time from edit to expiry.

An entry on a lookup table (just a description) should, in the main,
be completed within 30 seconds.

But a detail line for a purchase order may take several minutes.

You'll have to tune this to your own needs.

-- 
-----
Richard Quadling
"Standing on the shoulders of some very clever giants!"
EE : http://www.experts-exchange.com/M_248814.html
EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
ZOPA : http://uk.zopa.com/member/RQuadling
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.