Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Aiuto per le Session... sono un testone...

    Ciao,

    sono giorni che mi sbatto per capire e far funzionare le session in php ma ci deve essere qualcosa che mi sfugge!!!

    Prima pagina, dopo il login corretto creo le session che mi servono:

    Codice PHP:
    <?php session_start();
    $_SESSION['START'] = true;
    $_SESSION['NA'] = $NA;
    $_SESSION['ID'] = 1;
    ...
    Seconda pagina, dove se esiste la session 'START' vedo una cosa else un'altra, ma non ne vuole sapere... dove sbaglio??

    Codice PHP:
    <?php session_start();
    $ID  $_SESSION['ID'];
    $NA $_SESSION['NA'];

    if (
    $_SESSION['START'] == true)  
    {
    echo 
    $NA;
    echo 
    $ID;
    ...
    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  2. #2
    prova con isset($_SESSION['START')

  3. #3
    La sessione fa parte dell'header del file php, quindi quando chiami la funzione session_start() devi fare molta attenzione che prima di questa riga non ci sia alcun output html.

    Per esempio è un errore comune
    <?php
    echo "<html>
    <head>....";

    session_start();
    ?>

    ma lo è anche
    aprire il tag <?php dopo una riga bianca del documento html.
    Quella riga bianca corrisponde ad un output del documento generato.

    Praticamente prima di "<php session_start(); " non deve esserci nulla.
    Prova a verifica re l'id di sessione:
    <?php
    session_start();
    echo $_SESSION['session_id'];
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  4. #4
    Per vedere cosa contiene il vettore di sessione puoi anche usare la funzione di stampa degli array:

    Codice PHP:
    <?php
    session_start
    ();
    echo 
    "<pre>".print_r($_SESSIONtrue)."</pre>";
    ?>
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  5. #5
    Praticamente prima di "<php session_start(); " non deve esserci nulla.
    Ecco cosa mi sfuggiva!!!
    Però, per esempio in un ipotetico login la struttura è:

    1) prendo dati $_post
    2) query sul DB
    3) se OK creo session

    in questo caso prima della session ci sono per forza altre operazioni da fare...
    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  6. #6
    Originariamente inviato da Kai Hansen
    Ecco cosa mi sfuggiva!!!
    Però, per esempio in un ipotetico login la struttura è:

    1) prendo dati $_post
    2) query sul DB
    3) se OK creo session

    in questo caso prima della session ci sono per forza altre operazioni da fare...
    Puoi farle, a patto che ognuna di queste operazioni non dia alcun output del documento HTML generato, cioè nessun echo, print, print_r etc.

    Ti consiglio però di non legare l'autenticazione alla presenza della sessione, ma ad una variabile contenuta in essa, di cui stabilisci l'unset() in caso di determinati eventi (ad es. timeout, logoff, apertura pagine esterne all'area login...).
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  7. #7
    Grazie per le risposte date fin ora, sei stato di grande aiuto.

    Ti consiglio però di non legare l'autenticazione alla presenza della sessione, ma ad una variabile contenuta in essa, di cui stabilisci l'unset() in caso di determinati eventi (ad es. timeout, logoff, apertura pagine esterne all'area login...).
    Potresti farmi qualche esempio per capire meglio cosa dici?



    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  8. #8
    Originariamente inviato da Kai Hansen
    Grazie per le risposte date fin ora, sei stato di grande aiuto.



    Potresti farmi qualche esempio per capire meglio cosa dici?



    Sì.
    Non fare:

    Codice PHP:
    if ($user == $db_user && $password == $db_password) {
         
    $_SESSION['authentication'] = true;
    } else {
         unset(
    $_SESSION); // elimini tutto il vettore $_SESSION;

    ovvero che utilizzi il vettore $_SESSION solo se l'autenticazione va a buon fine.
    Utilizza una variabile posta al suo interno:

    Codice PHP:
    if ($user == $db_user && $password == $db_password) {
         
    $_SESSION['authentication'] = true;
    } else {
         unset(
    $_SESSION['authentication']);
         
    /* il vettore $_SESSION perde un elemento ma resta comunque definito per altri usi */

    Diciamo che non c'è niente di sbagliato in quello che fai tu ora, è solo che il vettore $_SESSION può servirti per un sacco di altre cose anche al di fuori dell'area riservata, quindi non bruciartelo tutto solo per un pezzo del sito.

    Il vettore è un contenitore di variabili, usarlo come una sola variabile è un po' sprecato, capisci? Tutto qui.
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  9. #9
    Ciao,

    scusa e scusate di nuovo il disturbo... ma ho ancora un problema con le session...
    e non ne riesco a venire a capo!

    pag1.php

    (prima di questo NON c'è niente è proprio la prima riga)
    <?php
    session_start();
    unset($_SESSION); ----> distruggo eventuale sessione precedente
    ...
    ...
    <?php session_start();
    $_SESSION['STRT'] = true;
    $_SESSION['NAME'] = $NAME;
    $_SESSION['IDQ'] = $IDQ;

    ----------> faccio il login e creo 3 vettori session con delle variabili che ho

    echo "STR ".$_SESSION['STRT']." - ";
    echo "NAME ".$_SESSION['NAME']." - ";
    echo "IDQ ".$_SESSION['IDQ'];

    -----------> faccio anche il controllo, cioè me le faccio scrivere ed in effetti l'output è:

    STR 1 - NAME kaihansen - IDQ 1 (perchè true=1 e IDQ = 1)

    page2.php (seconda pagina, ci vado direttamente cliccando da un link da pag1.php)

    (prima di questo NON c'è niente è proprio la prima riga)
    <?php
    session_start();
    $NAME = $_SESSION['NAME'];
    $VERIF = $_SESSION['STRT'];
    $IDQ = $_SESSION['IDQ'];

    echo "STR ".$VERIF." - ";
    echo "NAME ".$NAME." - ";
    echo "IDQ ".$IDQ;

    non ottengo le variabili, l'output è

    STR - NAME - IDQ

    Ho provato anche a mettere in page2.php

    <?php
    session_start();
    echo "<pre>".print_r($_SESSION, true)."</pre>";

    Dove sta l'errore??
    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  10. #10
    Cosa succede quando lanci il comando session_start()?
    Succede che PHP avvia la sessione inizializzando il vettore $_SESSION e definendo l'ID di sessione che puoi leggere attraverso session_id().

    Se scrivi
    Codice PHP:
    <?php
    session_start
    ();
    unset(
    $_SESSION);
    con l'unset() non fai altro che distruggere quello che hai appena creato con session_start().
    Come ti dicevo prima, non serve quasi mai fare l'unset di tutto il vettore $_SESSION, ma solo delle variabili in esso contenute che vuoi eliminare o che il nuovo processo (nel tuo caso l'autenticazione) dovrà ridefinire.

    La prova è questa:

    Codice PHP:
    <?php
    session_start
    ();

    echo 
    "Vettore \$_SESSION dopo la funzione session_start():

    session_id: "
    .session_id()."

    <pre>"
    .print_r($_SESSIONtrue)."</pre>";

    unset(
    $_SESSION);

    echo 
    "Vettore \$_SESSION dopo unset():

    session_id: "
    .session_id()."

    <pre>"
    .print_r($_SESSIONtrue)."</pre>";

    Come ti consigliavo prima, scrivi:

    Codice PHP:
    unset($_SESSION['elemento_da_eliminare']);
    // invece di:
    unset($_SESSION);

    // Oppure:
    unset($_SESSION['a'], $_SESSION['b'], $_SESSION['c'], ...);
    // se vuoi eliminare più elementi con una sola istruzione. 
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

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.