- Home
- Categorie
- Coding e Sistemistica
- Coding
- Conflitto tra sessioni
-
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
-
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.
-
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