2010/1/27 listread <listread@xxxxxxx>: > 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 -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php