La prima cosa da chiarire è che cosa davvero ti serve sapere: infatti, se sei interessato alla durata delle visite, tutti i sistemi che la misurano si basano sull'assunzione che tutte le richieste che un utente fa, distanziate nel tempo meno di un dato tot, facciano parte della stessa "sessione" di navigazione, che avrà quindi una durata pari alla differenza tra la prima e l'ultima volta che l'utente ha richiesto una pagina in quella "sessione"...

Se invece, vuoi sapere se la pagina del tuo sito è ancora aperta del browser dell'utente, anche se è fermo su quella pagina da mezzora, allora di certo una semplice chiamata ajax che carichi un tuo php sul sito può bastarti per "pingare" il sito e mantenere viva la sessione dell'utente, ma in questo caso non capisco quale uso tu possa fare di un simile dato, visto che, appunto, l'utente potrebbe essersi semplicemente dimenticato aperto il browser...

Quanto all'uscita dal sito , puoi provare con l'evento javascript "unload" dell'oggetto document, ma altrettanto non capisco cosa tu intenda misurare: il concetto di "uscita" da un sito web, se non stiamo parlando di un sito dotato di login e logout, ha poco senso, l'utente "esce" ogni volta che finisce di caricare una pagina, ovvero non appena ha finito di ricevere la pagina web la sua sessione comincia ad invecchiare, per poi morire il numero di minuti dopo a cui è impostata...