Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    Session_start ed invio header

    Ciao a tutti;
    facendo un po' di prove con le sessioni, mi vien fuori l'errore:

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by...
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent...

    Se lo interpreto bene è dovuto al fatto che il comando session_start() non è richiamato ad inizio pagina...
    Se però nella pagina in cui io devo aprire la sessione, ho la necessità di verificare la correttezza ad esempio di user e password inseriti dall'utente tramite form, come faccio ad aprirla prima ancora di aver fatto il confronto?
    Grazie a tutti

  2. #2
    Non capisco la domanda. Ti basta mettere session_start() all'inizio dello script a prescindere. Non vedo quale sia il problema.
    In ogni caso il problema si verifica solamente in caso di generazione di output mentre del semplice codice di controllo non da alcun problema.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ciao, grazie per la risposta prima di tutto;
    Il mio dubbio è questo...
    guardando degli esempi (anche qui sul forum) dell'utilizzo delle sessioni, vedo del codice che ha più o meno questa sequenza:

    - POST dei campi del forum per recuperare i dati inseriti dall'utente;
    - connessione al db e verifica della correttezza dei dati;
    - se tutto ok, apro la sessione;

    Utilizzando questa sequenza, ottengo quell'errore (almeno in remoto, mentre in locale funziona correttamente);
    Quindi invece nell'ipotetica pagina in cui svolgo queste operazioni, devo aprire una sessione ancora prima di aver effettuato il controllo sui dati utente? Faccio fatica a comprenderla questa cosa...

  4. #4
    Originariamente inviato da sitodue
    guardando degli esempi (anche qui sul forum) dell'utilizzo delle sessioni, vedo del codice che ha più o meno questa sequenza:

    - POST dei campi del forum per recuperare i dati inseriti dall'utente;
    - connessione al db e verifica della correttezza dei dati;
    - se tutto ok, apro la sessione;
    Questa cosa non mi risulta!

    Invece, leggere BENE il manuale no eh?!?!

    session_start()
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    ad esempio qui: http://www.html.it/pag/16887/autenticazione-in-pratica/
    Il codice postato in quella miniguida è corretto?

  6. #6
    Infatti non ho detto che session_start() deve NECESSARIAMENTE essere la prima istruzione.

    Originariamente inviato da satifal
    Ti basta mettere session_start() all'inizio dello script a prescindere.
    Questo ti evita potenziali problemi, ma nulla vieta di mettere l'istruzione solamente nel momento del bisogno se si sa quello che si sta facendo, dato che, da manuale:

    codice:
    To use cookie-based sessions, session_start() must be called before outputing anything to the browser.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Quindi nessuna delle righe precedenti session_start() in quel codice rappresenta un output?
    Neanche le righe vuote?
    Comunque.. mettiamo che per non incorrere in eventuali errori richiamo session_start() ad inizio pagina... poi prelevo i dati inseriti dall'utente, li confronto con quelli memorizzati nel db e se c'è corrispondenza li salvo eventualmente nella sessione e procedo;
    Se invece non c'è corrispondenza e ho un redirect alla pagina di login, cosa succede di quella sessione aperta?

  8. #8
    Originariamente inviato da sitodue
    Quindi nessuna delle righe precedenti session_start() in quel codice rappresenta un output?
    Neanche le righe vuote?
    Come puoi vedere tutto il codice HTML si trova dopo lo script PHP, le righe vuote all'interno dei TAG PHP (<?php ?>) non fanno testo dato che non generano output, ma lo farebbero eventuali righe vuote poste prima del TAG di apertura del PHP (<?php) e non vedo righe vuote prima del TAG.


    Originariamente inviato da sitodue
    Se invece non c'è corrispondenza e ho un redirect alla pagina di login, cosa succede di quella sessione aperta?
    Non ti crea alcun problema.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Chiarissimo!
    grazie 1000

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ciao,
    approfitto ancora di te per chiederti un altro paio di cose sull'argomento...

    - Il meccanismo di invio degli header è differente tra remoto e locale? questo perchè porzioni di quel codice, se provate in locale funzionano correttamente, mentre in remoto presentano l'errore sull'invio degli header già avvenuto..

    - Se dovessi svolgere queste operazioni:
    Session_start();
    controllo dati utente;
    messaggio d'errore;
    redirect (header refresh);

    questa sequenza è corretta? Da come ho letto in un altro post sembrerebbe di no perchè l'eco compromette il redirect, ma ho esempi di codice simili e correttamente funzionanti...

    - Ho letto che per risolvere molti di questi problemi, anche se con un degrado delle prestazioni, è possibile usare la funzione ob_start(); che permette di inviare cookie anche dopo la generazione di output... E' corretto? In tal caso inserendola ancora prima di session_start il problema di inviare i cookie dopo aver già inviato gli headers viene aggirato?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.