Yo lo hago mas o menos como tu dices... tengo una tabla con las sesiones activas (que de paso, sirve para evitar el Session Hijacking con ciertos parametros) y cada vez que el usuario hace una peticion a una pagina, ésta refresca el dato de ultimo acceso correspondiente a su fila... luego solo tienes que extraer las filas cuyo dato de ultimo acceso sea X o mas y tienes los usuarios conectados...
Si tu sistema requiere de algo mas exacto puedes hacer como hice en uno de mis proyectos aunque este metodo requiere de JS activado, y se trata de lo mismo, pero poner un timer en javascript hacia un script cada X segundos o minutos, y si un usuario no ha dado respuesta durante mas de ese tiempo es porque ha cerrado la pagina.
Un saludo.
Si tu sistema requiere de algo mas exacto puedes hacer como hice en uno de mis proyectos aunque este metodo requiere de JS activado, y se trata de lo mismo, pero poner un timer en javascript hacia un script cada X segundos o minutos, y si un usuario no ha dado respuesta durante mas de ese tiempo es porque ha cerrado la pagina.
Un saludo.