PHP: cómo verificar si el usuario ya inició sesión y redireccionar a la página de inicio de sesión

Soy nuevo en PHP y estoy luchando con lo siguiente:

Tengo una página donde quiero verificar si alguien es un usuario registrado antes de permitirles ver el contenido del sitio. Así que mi pensamiento fue que en mi archivo de encabezado (que se hace referencia en todas las páginas a través de require_once("includes/header.php"); ) Puedo verificarlo y redirigirlo a una página de inicio de sesión ( login.php ) si tienen no registrado aún

Así que aquí está todo lo que tengo en mi encabezado:

    set_charset("utf8"); if($conn->connect_error){ die("Connection failed: " . $conn->connect_error); } // fetch main translations $location = "%main%"; $stmt = $conn->prepare("SELECT tID, " . $selectedLang . " FROM TranslationsMain WHERE location LIKE ? ORDER BY tID"); $stmt->bind_param("s", $location); $stmt->execute(); $result = $stmt->get_result(); while($arrTranslations = $result->fetch_assoc()){ $trans[] = array("ID" => $arrTranslations["tID"], "trans" => $arrTranslations[$selectedLang]); } $conn->close(); // get main translations by ID function fetchTransMain($trans, $itemID){ foreach($trans as $key => $val){ if($val["ID"] == $itemID){ return $val["trans"]; } } } ?>       Some title                     var baseURL = ''; var pageURL = ''; var pageName = ''; var selectedLang = '';    

Ahora esto no funciona y creo que me estoy perdiendo un par de cosas, pero no pude encontrar un buen tutorial o guía sobre eso. Además, no estoy seguro de si hay algo más que deba hacer para comenzar y configurar la sesión.

Puede alguien ayudarme con esto ?

Nota:
Solo se trata de verificar si un usuario ya inició sesión, ya que todo el registro y la verificación real del usuario se realiza en la página de inicio de sesión separada, y para esto ya tengo el código funcionando.

Actualización: Habilitar los mensajes de error devuelve los siguientes errores:

 Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /homepages/21/d580042014/htdocs/index.php:2) in /homepages/21/d580042014/htdocs/includes/header.php on line 9 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /homepages/21/d580042014/htdocs/index.php:2) in /homepages/21/d580042014/htdocs/includes/header.php on line 9 array(0) { } Warning: Cannot modify header information - headers already sent by (output started at /homepages/21/d580042014/htdocs/index.php:2) in /homepages/21/d580042014/htdocs/includes/header.php on line 12 Notice: Undefined index: lang in /homepages/21/d580042014/htdocs/includes/header.php on line 18 

Actualizar:
Según los comentarios, ahora publiqué todo lo que está actualmente en el encabezado.

Muchas gracias de antemano.

Actualización: la pregunta se resolvió en el chat .


Según su edición, cambie este bloque:

     

a:

      
  • Siga la misma estructura para comenzar la sesión en todos sus archivos usando sesiones.
  • Asegúrese de que su archivo no tenga una marca de orden de bytes (BOM).
  • No hay espacio antes de etc. Esto ya se ha establecido en los comentarios.

Utilizar un editor de código como Notepad ++ https://notepad-plus-plus.org/ y guardarlo como UTF-8 sin BOM, lo que asegurará que no haya una marca de orden de bytes.

Además, utilizando el nuevo método para la comprobación de matriz de sesiones.

 if(!isset($_SESSION['login']) && $_SESSION['login'] != ''){ 

También verifique que ninguno de sus archivos incluidos / requeridos tenga los mismos problemas, incluido login.php .


Notas al pie:

Dentro del menú desplegable de Notepad ++, verás

  • Codificación. Le mostrará en qué está configurada la encoding del archivo actual.

Si muestra una marca de orden de bytes, siga estos pasos:

  1. Haga clic en "Codificación".
  2. Convierta a UTF-8 sin BOM
  3. Guarda el archivo.

    • Haz esto para todos tus archivos.

Referencia (s):

  • Cómo reparar el error "Encabezados ya enviados" en PHP

Nota al margen:

Debería cambiar $stmt->execute(); a

 if(!$stmt->execute()){ trigger_error("there was an error....".$conn->error, E_USER_WARNING); } 
  • Es mejor detectar posibles errores en su consulta.

Tienes que moverte

 session_start(); if((!isset($_SESSION['login']) && $_SESSION['login'] != '')){ header ("Location: login.php"); } 

a la parte superior de la lista y muévete ! dentro del soporte.

Coloque el perfil de usuario en las variables de sesión en el script PHP al que llama después de la página de inicio de sesión

 $_SESSION['user_id'] = $row["user_id"]; $_SESSION['profile_id'] = $row["profile_id"]; $_SESSION['name'] = $row["name"]; $_SESSION['surname'] = $row["surname"]; $_SESSION['application_auth'] = $row["application_auth"]; 

Coloque el siguiente código en la parte superior de cada página que desea proteger por usuarios no válidos

  

El script sessionCheck En este caso también compruebo si el usuario tiene derecho a ver la página específica usando el profile_id, pero puede eliminarlo

  

La siguiente parte debe ir antes de include "system/config.php"; porque parece que este archivo está dando salida y también el hecho de que el siguiente código no depende de ningún otro dato.

 session_start(); if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){ header ("Location: login.php"); } 

Segundo:

if(!(isset($_SESSION['login']) && $_SESSION['login'] != '')){

Probablemente debería ser: if(!isset($_SESSION['login']) && $_SESSION['login'] == ''){

significado == '' y no != ''

Es muy probable que un usuario que no haya iniciado sesión (dependiendo de su código) no tenga un valor establecido para que su código verifique si no está en blanco, por lo que solo se reenviará a los usuarios que hayan iniciado sesión.

Por lo tanto:

     

Si no se está reenviando, es probable que $ _SESSION [‘login’] esté configurado, debe borrar sus cookies para ese dominio.