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.