uffff, que codigo complicado

, pero aparentemente a simple vista esta bien. El unico tema que no tenes en cuenta es el browser y las cabeceras http:. Veamos un poco como seria correcto. Fundamental para que sea prolijo , eficiente y no te compliques demasiado, es usar el funcion header(), es decir forzar el redireccionamiento a otras paginas segun lo que ocurra, esta es una muy buena forma de evitar los "atras" de los usuarios, ya que cuando haces atras en el browser y te dice "tu sesion ha caducado" y le das actualizar, el browser tratara en todo momento de reenviar toda la informacion (tanto POST, GET y COOKIES ) que xistiera en la pagina anterior.
Aque voy con esto, es un poco de orden para ahcer bien las cosas.
1- formulario de login.
este mismo debe consultar en la BD, si el usuario existe guardo una varibale de sesion y header(otra pagina). sino session destroy.
2 en el resto de las paginas preguntas por "alguna variable" y que ya hayas guardado como variable de sesion que creas en 1 luego del ok de la BD.
De esta forma, si la variable no existe no se validara la sesion, y aunque el usuario haga "atras" si tu borraste la variable no tiene de donde encontrarla ya que solo la creo la primera pagina de login.
Espero haber sido claro.
Suerte.