Problemi con le SESSIONI

Ciao Gianni,

dopo aver letto le guide da te consigliate (molto utili e ben fatte),ho provato a creare una Sessione, ma mi viene restituito il seguente errore:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:9) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 24

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:9) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 24

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

L'errore si riferisce alla prima riga del seguente frammento di codice:

          <?        session_start();

      // Salvo i dati...           $_SESSION['Mat']=$Mat;       $_SESSION['Cod_Esame']=$Cod_Esame;       $_SESSION['Num_Attributo']=$Num_Attibuto;      

Devo cambiare dei parametri al file di configurazione "php.ini",oppure ad altri file?

Se si quali sono questi file in cui bisogna fare delle modifiche, e quali sono le

modifiche da apportare.

Ho visto sulla guida che hai scritto che questo errore viene restituito anche quando si lascia un semplice spazio tra il tag di apertura di php; visto che la mia pagina comincia così:

<!-- Pagina Controllata -->

<HTML>

  <HEAD>

    <TITLE> Modifica un esame del piano di studio </TITLE>

  </HEAD>

ecc..

allora ho provato a mettere il frammento di codice precedente, prima di

"<!-- Pagina Controllata -->", ma il risultato non è cambiato.Perchè?

Dove sbaglio?

GRAZIE

inviato 11 anni fa
noems
X 0 X

Non ho altre raccomadazioni da fare. Verifica nuovamente che non ci sia nessun output prima dell'avvio della sessione.

Quando metti session_start all'inizio dello script, a che riga fa riferimento il messaggio di errore?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Se faccio così:

<!-- Pagina Controllata -->
<HTML>
  <HEAD>
    <TITLE> Modifica un esame del piano di studio </TITLE>
  </HEAD>

  <BODY BACKGROUND="Sfondo1.gif">
    <CENTER>
      <STRONG>
        <FONT FACE="Comic Sans MS" SIZE=3> MODIFICA UN ESAME DEL PIANO DI STUDIO </FONT>
      </STRONG>
    </CENTER>
     
    <BR>
    <BR>            
    <?
      session_start();
      require "Login.php";
      $Mat = $_POST['Mat'];
      $Cod_Esame = $_POST['Cod_Esame'];
      $Num_Attributo = $_POST['Num_Attributo'];         

      // Salvo i dati...
   
      $_SESSION['Mat']=$Mat;
      $_SESSION['Cod_Esame']=$Cod_Esame;
      $_SESSION['Num_Attributo']=$Num_Attibuto;
    ?>

ottengo:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:9) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 17

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:9) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 17
 Spiacente,ma la matricola inserita non è presente nel db, oppure non ha ancora associato un piano di studio
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Invece se faccio così:

    <?
      session_start();
      require "Login.php";
      $Mat = $_POST['Mat'];
      $Cod_Esame = $_POST['Cod_Esame'];
      $Num_Attributo = $_POST['Num_Attributo'];         

      // Salvo i dati...
   
      $_SESSION['Mat']=$Mat;
      $_SESSION['Cod_Esame']=$Cod_Esame;
      $_SESSION['Num_Attributo']=$Num_Attibuto;
    ?>

<!-- Pagina Controllata -->
<HTML>
  <HEAD>
    <TITLE> Modifica un esame del piano di studio </TITLE>
  </HEAD>

  <BODY BACKGROUND="Sfondo1.gif">
    <CENTER>
      <STRONG>
        <FONT FACE="Comic Sans MS" SIZE=3> MODIFICA UN ESAME DEL PIANO DI STUDIO </FONT>
      </STRONG>
    </CENTER>
     
    <BR>
    <BR>

ottengo il seguente errore:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:1) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:1) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 2

MODIFICA UN ESAME DEL PIANO DI STUDIO 


 Spiacente,ma la matricola inserita non è presente nel db, oppure non ha ancora associato un piano di studio
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Se non sbaglio sono gli stessi errori. . . . .

risposto 11 anni fa
noems
X 0 X

Il primo caso è ovviamente sbagliato. Tutto l'HTML che precede il session_start è un output e pertanto la sessione non si avvia correttamente.

Il secondo invece doveva funzionare. Prova a realizzare una pagina con la sola istrusione session_start() e verifica se il problema persiste.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ho provato a fare così e ovviamente....

<HTML>

 <HEAD>

   <TITLE> RPOBSJ </TITLE>

 </HEAD>

 <BODY>

<?

  session_start();

?>

 </BODY>

</HTML>

mi viene restituito il seguente errore:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Prova.php:7) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Prova.php on line 8

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Prova.php:7) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Prova.php on line 8

Se invece scrivo questo:

<?


















  session_start();
?>

non mi viene segnalato nessun problema,anche se tolgo tutti gli spazi.....
risposto 11 anni fa
noems
X 0 X

E significa che tutto funziona correttamente. Nel primo caso la pagina iniziava con dell'HTML. Questo viene subito inviato al browser pertanto costituisce un output. La sessione non potrà più partire.

Nel secondo caso la pagina inizia subito con il tag di PHP, senza neanche uno spazio dall'inizio del file. Tutti gli spazi e gli "a capo" presenti all'interno del codice PHP non verranno mai inviati al browser, pertanto non costituiscono output. La sessione verrà avviata regolarmente.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Quindi,perchè la mia pagina non ne vuole sapere di partire??

risposto 11 anni fa
noems
X 0 X

Perché, in qualche modo, quando chiami quello script viene prodotto un output prima che la funzione session_start() venga eseguita. Nota che l'errore "Warning: session_start() [function.session-start]: Cannot send session cookie..." segnala sempre a che riga è stato generato l'output indesiderato.

Di più non posso dirti  :dunno:

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Non abbandonarmi, ho messo in piedi questo sito grazie ai tuoi "preziosi consigli e suggerimenti".

Certo che mi viene resituito la linea, ma mettiti nei miei panni se:

    <?
      session_start();
      require "Login.php";
      $Mat = $_POST['Mat'];
      $Cod_Esame = $_POST['Cod_Esame'];
      $Num_Attributo = $_POST['Num_Attributo'];         

      // Salvo i dati...
   
      $_SESSION['Mat']=$Mat;
      $_SESSION['Cod_Esame']=$Cod_Esame;
      $_SESSION['Num_Attributo']=$Num_Attibuto;
    ?>

questo è l'inizio della mia pagina e mi vengono dati i primi 2 warning (che faccio notare sono diversi)

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:1) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php:1) in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Mod_Esame2.php on line 2

poi vi viene visualizzata la scritta nel costrutto echo e cioè:

MODIFICA UN ESAME DEL PIANO DI STUDIO

poi sotto questa scritta compare un'altro warning, che non ho prorprio capito a cosa si riferisce:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Ma qual'è la linea 0?

Posso sostituire le sessioni con altro?se si con cosa (sempre se và bene per quello che devo fare io...... :( )))

risposto 11 anni fa
noems
X 0 X

Ma se in un file metti solo: <?php session_start(); ?> ti da errore?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

No, ma non riesco a capire il nesso. . . .

risposto 11 anni fa
noems
X 0 X

Domande apparentemente fuori tema:

Che versione di PHP hai? Come l'hai installata? Su Apache?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Non voglio essere presuntuoso ma devo dirla questa cosa:

se scrivo:

              <?
                   session_start();
               ?>

oppure

<?
    session_start();
?>

le cose sembrano uguali e invece.......nel secondo modo sono riuscito a togliere i 2 warning iniziali. . . .

mi rimane sempre questo però:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Non è che bisogna mettere mano al php.ini?

risposto 11 anni fa
noems
X 0 X

Certo che dovevi dirlo!!!! Così almeno ho capito cosa non ti è chiaro   :P

Come ti avevo già detto in qualche messaggio precedente, anche gli spazi prima dell'apertura del tag PHP costituiscono un output pertanto vanno eliminati se vuoi usare le sessioni.

I due script che hai riportato non sono equivalenti. Infatti mentre il secondo non genera neanche un carattere di output, il primo produce come output una serie di spazi vuoti, che anche se non si vedono nel browser comunque ci sono. Tant'è vero che la sessione non parte!

Per il secondo errore, c'è un modo per disattivarlo ma mi sembra strano che ti venga mostrato  ???

Dimmi prima la verisione di PHP e come hai effettuato l'installazione.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

La versione di PHP è la 5; per quanto riguarda l'installazione ho seguito alla lettera (anzi alla virgola) tutto la guida che hai messo a disposizione degli utenti,

cambiando solo poche cose nel file php.ini (come ad esmepio invece della cartella htdocs ho messo quella in cui ho tutti i miei file; volevo sapere se c'è differenza tra C:/Php 5/ext e C:\Php 5\ext,chiedo questo perchè in quel poco che ho modificato,ho utilizzato la prima sintassi e non la seconda che è quella di default.

Altro?

risposto 11 anni fa
noems
X 0 X

che versione della 5?

EDIT:

avevi installato versioni di PHP o MySQL precedenti?

risposto 11 anni fa
Gianni Tomasicchio
modificato 11 anni fa
X 0 X

Se non erro è la 5.05, si ma da poco ho formattato il pc, e ho rieseguito l'installazione (sempre dalla vostra guida). .  . .

Come faccio a dirtelo di preciso?

risposto 11 anni fa
noems
X 0 X

Confermo il file che ho scompattato è "php-5.0.5-Win32", quindi dovrebbe essere PHP 5.05

risposto 11 anni fa
noems
X 0 X

Ok.

Non so perché ti viene mostrato quel warning  >:( ma per disabilitarlo puoi andare nel php.ini e mettere a 0 le direttive session.bug_compat_42 e session.bug_compat_warn

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Nell'ultima parte del messaggio c'è scritto:

You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.

Quindi sono andato in php.ini e ho visto che il valore di queste 2 variabili è, per entrambe, settato ad 1:

session.bug_compat_42 = 1

session.bug_compat_warn = 1

ho provato a settarli a 0 e ad off entrambi, ma l'errore rimane. . . .

risposto 11 anni fa
noems
X 0 X

Ho provato a creare un nuovo file (salvato sempre con estensione .php), con solo le seguenti istruzioni, senza nessun codice HTML:

<?
  session_start();
  require "Login.php";
  $Mat = $_POST['Mat'];
  $Cod_Esame = $_POST['Cod_Esame'];
  $Num_Attributo = $_POST['Num_Attributo'];         

  // Salvo i dati...
   
  $_SESSION['Mat']=$Mat;
  $_SESSION['Cod_Esame']=$Cod_Esame;
  $_SESSION['Num_Attributo']=$Num_Attibuto;
?>

ma il problema rimane. ...

risposto 11 anni fa
noems
X 0 X

hai riavviato Apache?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

No, ma è nei servizi, devo comunque riavviarlo, adesso lo faccio. . .

Ho provato a ricopiare (senza fare copia e incolla) il frammento di codice riportato prima e ho richiamato la nuova pagina,RISULTATO NIENTE ERRORI (SENZA RIAVVIARE APACHE OVVIAMENTE).

Spesso quando scrivo programmi in C, mi è capitato di scrive dei caratteri che all'occhio umano non non è possibile vedere ma che il compialtore vede (i cosiddetti caratteri invisibili) non è che la stessa cosa venga fatta dal php, anche se quest'ultimo è un'interprete?

risposto 11 anni fa
noems
X 0 X

Se il PHP è installato come modulo di Apache allora il riavvio è obbligatorio. Se non è stato necessario farlo allora significa che hai risolto in un altro modo.

Il problema dei caratteri "invisibili" capita pure in PHP, ma è causato principalmente dall'editor che si usa per realizzare gli script.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Per quanto riguarda le sessioni, funziona tutto  O0

 :bye:

risposto 11 anni fa
noems
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda