• User Newbie

    Conflitto tra sessioni

    Buonasera,
    avrei un problema da risolvere... ho provato a cercare nelle varie discussioni ma non ho trovato nulla che mi potesse aiutare...

    Sto realizzando un sito con php e ho dei problemi nella gestione delle sessioni. Spero di riuscire a spiegarmi.

    Ho diversi form login:

    • uno per la gestione del back-office del sito
    • uno all'interno del sito in quanto il cliente vuole che alcune parti siano visibili solo a utenti registrati
    • uno per permettere di visualizzare e scaricare dei file particolari a utenti privilegiati.

    I vari login e le varie operazioni vanno tutte a buon fine se prese singolarmente.
    I miei dati, user e pw, sono salvati in un db. Ci sono tutti i vari controlli e se l'utente viene trovato nel db avvio una sessione.

    MA...ed ecco il problema... se sono loggata ad esempio nel form 1, non voglio essere loggato anche al form 2 (cosa che invece succede).

    Come faccio a creare sessioni separate per ogni sezione?

    (non so se sono stata molto chiara)

    Spero che qualcuno possa aiutarmi.
    Grazie


  • User Attivo

    Ciao roh
    la soluzione dipende dalla struttura del tuo sito.

    Se le varie "sezioni" hanno dei path diversi (ad esempio: miosito.it/backoffice , miosito.it/utenti-loggati , miosito.it/utenti-privilegiati) la soluzione migliore è usare i cookies (con setcookie() e $_COOKIES) e dare ad ogni cookie un path diverso.

    Se invece non è questo il caso o preferisci usare la gestione "nativa" delle sessioni del PHP non riesco a pensare ad un'altra soluzione che non sia usare nomi diversi per i vari login. Quindi tu avrai "user_backoffice" per il nome utente loggato nel backoffice e "user_privilegiato" per la sezione utenti privilegiati e ovviamente saranno compilati solo quelli per cui l'utente ha fatto il login nella sezione apposita.


  • User

    La sessione è globalmente valida in tutto il dominio, se la valorizzi da una parte te la ritrovi potenzialmente in ogni pagina in cui hai inizializzato il session_start().

    Il mio consiglio è quello di sfruttare la caratteristica di essere considerata da php come un array e creare una struttura multidimensionale a seconda della sezione.

    Un Esempio:
    [PHP]# Ipotetica valorizzazione di un utente a seguito di query, controlli e via discorrendo..
    $_SESSION['sezione1']['userId'] = 1;[/PHP]

    Eseguendo successivamente i controlli sull'esistenza della sessione in tal modo:
    [PHP]if (!isset($_SESSION['sezione1']))
    die('Non sei autenticato a questa sezione del sito');[/PHP]

    Quindi a seconda della sezione creerai tante chiavi inerenti ad esse, come sezione1, con nominativi univoci per quella sezione e come sottochiavi introdurrai i dati di cui hai bisogno per la valorizzazione dell'utente.

    Quando vorrai disconnettere un utente basterà eseguire un unset() della chiave primaria per quella sezione:

    [PHP]unset($_SESSION['sezione1']);[/PHP]

    Spero sia questo quello di cui avevi bisogno 😉