*Aplausos*
Che tu, bien que hay que usar el buscador, pero ahórrate comentarios como ese.
Tal y como ha dicho SoyJoaquin, usa time, utiliza en cada archivo, yo uso un mismo archivo para conectarme por todos, cosa que me da ventaja a la hora de hacer este tipo de cosas, cada vez que el usuario navegue por una categoria o refresque la misma pagina se le añada un tiempo a su campo "time" o como lo quieras llamar. Luego, en el archivo base de la web, donde todo el mundo se conecta, y asi se reproduce y ejecuta el codigo PHP que siempre esta, pones que si un usuario que tiene MENOS de ese TIME (al tener menos significa que no ha navegado mas por la web y no ha aumentado el tiempo) cambie su estado de online a offline (1 por 0).
Si te parece que con decir "Usa Time()" no esta resuelta la duda (Que según mi criterio si, ya que es la base fundamental, si le explico como hacerlo quizás el tenga otra manera, por varios caminos se llega a Roma)
Ya que tu cabeza puede que no te de para razonar mi información, seré mas claro:
Usa time(), es una función que devuelve el numero en segundos desde 1970.
Cada sistema de usuarios conectados en PHP no es "exacto", todos son relativos a un tiempo de espera, por lo general esta llega siendo de 10 a 15 minutos.
Imaginemos que en la tabla de tus usuarios tengamos un nuevo campo llamado "tiempo_conect", cuyo valor que almacenara sera el resultado del time() actual
MAS el intervalo de plazo. Si usamos por ejemplo 15 minutos seria algo como:
time() + (15 * 60);
15 Seria la cantidad de minutos que se multiplicara por 60 para sacar el resultado de segundos que tiene, este valor se le sumara a lo devuelto por time();
Ahora te explico, imaginemos que "1" es conectado y "0" es desconectado, extraemos todos los usuarios que en el campo "conectado" (Campo donde se guardara si esta conectado o desconectado en tu tabla de usuarios) sea igual a "1" para comprobar si el valor almacenado en ese campo es menor al time() actual. ¿Qué pasa si llega a ser menor?, esto quiere decir que el usuario no a tenido actividad por los 15 minutos de intervalo que colocamos, por lo que procederemos a hacer un UPDATE para reemplazar ese valor "1" (Conectado) por "0" (Desconectado) en el campo "conectado" de tu tabla de usuarios.
Lo otro que tenemos que hacer, es que si el usuario entra a otra pagina o actualiza la actual, le diga a nuestro código "Hey, aun estoy aquí", Para eso primero verificamos si estamos conectado (El simple paso del isset en la SESSION del usuario) y después almacenamos nuestro time() actual mas nuestro intervalo (Ver primer ejemplo) en el campo "tiempo_conect" de nuestro usuario en la base de datos.
Un saludo.