redirigere alcune pagine se non si è connessi alla pagina errore

Salve a tutti, ho delle pagine a cui si accede tramite autenticazione, come faccio a fare in modo che se l'utente non è loggato mi rimanda a una pagina di login?

ho provato con Location ma nulla mi da un errore

Warning: Cannot modify header information - headers already sent by (output started at /var/www/progetti/sito/lang/it.php:67) in /var/www/progetti/sito/include/header2.php on line 23

riferito a questa riga

header("location:index.php");

la pagina che devo nascondere contiene il login utente ma anche se l'utente non è loggato me la carica lo stesso.

Posto il codice di login

   require_once('config.php');

   //Controllo che l' utente sia loggato
   if(IsSet($_SESSION['logged']))
   {
      //L' utente e' loggato  


      echo "<div id=\"margine-login-12\">";
         echo ''. $trad['hello'] . $_SESSION['user_name'] .'';
         echo "<span class=\"margine-login-21\"><a href=\"login.php?logout=bye\" class=\"menu\">". $trad['Disconnettiti'] ."</a></span>";
      echo "</div>";         
      }else{

      //header("location:index.php"); -- linea 23
                include ('credenziali_utente.php');

               
   }     

il tutto viene richiamato nella parte superiore della pagina da ed header 2 contiene il codice sopra riportato

<?php include ('include/header2.php'); ?> <!-- header -->

inviato 8 anni fa
Falco72
X 0 X

Gli header vanno inviati prima che sia stato inviato qualsiasi altro output.

Cioè la funzione header la puoi chiamare solo all'inizio del file, e devi accertarti che niente sia stato mostrato prima, neanche uno spazio o un ritorno a capo, quindi la pagina deve essere vuota.

Assicurati che non venga mostrato nulla nella pagina prima della chiamata a header.

Se hai proprio bisogno di chiamare header in un punto dove hai già qualche output prova ad usare l'output buffer (ob_start() e company)

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ciao trashofmasters, ok ma come faccio se il controllo viene fatto proprio nel login? devo fare in modo che un utente acceda a quella pagina solo se autorizzato... praticamente è la pagina per la gestione delle impostazione personali e se l'utente non si è loggato quella pagina non deve per nulla caricarmela ma buttarlo fuori su una pagina di errore. Cosi com'è ora mi carica lo stesso la pagina con la sola grafica delle impostazioni ovviamente senza credenziali ecc.

risposto 8 anni fa
Falco72
X 0 X

Gli header vanno inviati prima che sia stato inviato qualsiasi altro output.

Cioè la funzione header la puoi chiamare solo all'inizio del file, e devi accertarti che niente sia stato mostrato prima, neanche uno spazio o un ritorno a capo, quindi la pagina deve essere vuota.

Assicurati che non venga mostrato nulla nella pagina prima della chiamata a header.

Se hai proprio bisogno di chiamare header in un punto dove hai già qualche output prova ad usare l'output buffer (ob_start() e company)

:bye:

ciao ho fatto una cosa del genere

<?php

   require_once('config.php');

   function redirect($url,$tempo = FALSE ){
    if($tempo == FALSE ){
     header('Location:' . $url);
    }else{
     header('Refresh:' . $tempo . ';' . $url);
    }
   }

   

   //Controllo che l' utente sia loggato
   if(IsSet($_SESSION['logged']))
   {
      //L' utente e' loggato  


      echo "<div id=\"margine-login-12\">";
         echo ''. $trad['hello'] . $_SESSION['user_name'] .'';
         echo "<span class=\"margine-login-21\"><a href=\"login.php?logout=bye\" class=\"menu\">". $trad['Disconnettiti'] ."</a></span>";
      echo "</div>";         
      }else{
      
      //Avvio il buffering
               ob_start();

              echo "Stai per essere reindirizzato";
              redirect('pagina.php',5);

              //Interrompo il buffering e ne rilascio il contenuto
             ob_end_flush();
      
   } 
   
   
   ?>

ma da sempre lo stesso problema

Warning: Cannot modify header information - headers already sent by (output started at /var/www/progetti/sito/lang/it.php:67) in /var/www/progetti/sito/include/header2.php on line 15

risposto 8 anni fa
Falco72
modificato 8 anni fa
X 0 X

ho risolto cambiando nel php.ini

output_buffering=Off; in On

non so però se corretto

risposto 8 anni fa
Falco72
X 0 X

E' un po' pericoloso basare il funzionamento di uno script sulla configurazione dei php.ini. Che succede se in produzione non puoi modificare questa opzione?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ciao gianni, ho rimesso il tutto come prima e ho inserito una funzione dopo l'else

include ('funzioni.php');

con dentro

<?php
function fnRedirect($sURL=''){
  /* IF - verifica presenza valore parametro */
  if ($sURL != ""){

    /* IF - Verifica intestazioni: non inviate */
    if (!headers_sent()){

      header("Location: ". $sURL);
      die();

    } /* ELSE - Verifica intestazioni: inviate */
    else {

      die("<script>\n".
        "document.location = '". $sURL ."';\n".
        "</script>");

    }
    /* END IF - Verifica intestazioni */

  }
  /* END IF - verifica presenza valore parametro */

}
fnRedirect('index.php');
?>
risposto 8 anni fa
Falco72
X 0 X

probabilmente avresti risolto anche mettendo ob_start(); come primissima istruzione eseguita da PHP

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda