Lo más práctico es fijar un tiempo de expiración de sesión de unos 10 min p.ej., después del cual se autodestruye la sesión. Aunque esto tiene un par de inconvenientes: si un usuario sigue activo pasado el tiempo de expiración, deberá volver a logearse, y, por otra parte, este parámetro se especifica en el php.ini (session. Gc_maxlifetime), de modo que si no se tiene acceso a este archivo (servidor web ajeno) no se puede modificar.
Hay otra opción mucho más efectiva aunque bastante más compleja. Mediante la función session_set_save_handler se pueden definir funciones de manejo de sesiones propias, ej:
session_set_save_handler("abrir_sesion", "cerrar_sesion","leer_sesion", "escribir_sesion","destruir_sesion", "limpiar_sesion");
¿Para qué sirve esto? Pues puedes por ejemplo montar un sistema propio de manejo de sesiones a través de mysql. Sólo se tienen que implementar las funciones según las necesidades.
Aquí tienes un ejemplo muy bien explicado de cómo hacer esto:
http://www.onlamp.com/pub/a/php/2001/05/10/sessions.html?page=2