- Home
- Categorie
- Coding e Sistemistica
- PHP
- session e session db
-
session e session db
Ciao a tutti, uso le sessioni ma non le ho mai salvate su db... e ora stavo valutando se e come farlo.
Solo che non mi è chiaro il funzionamento...Per gestire le sessioni solitamente si usa la variabile SESSION, il server di suo si salva un cookie con idsession ...e da quanto ne so, viene appunto mantenuta da quel cookie la session attiva, finchè non passa un certo tempo impostato senza alcuna azione da parte dell'utente.
DOMANDA 1: se chiudo il browser e lo riapro la sessione si mantiene perchè non è passato abbastanza tempo e il cookie su server è ancora valido?)Per creare la funzione di "ricorda login"... solitamente si scrive un cookie con i dati di session sul browser dell'utente (magari criptati) così l'utente è come se non facesse mai logout.. almeno finchè scade il cookie sul suo browser (in verità fa un autologin) e perciò se ritorna sul sito, controlli se esiste il cookie, lo leggi e lo carichi in sessione, ma se ci si basa solo sul cookie del browser utente.. l'utente potrebbe riscriverlo.. e quindi autologgarsi come un altro utente sbaglio? si può aggiungere un controllo?
DOMANDA 2: Scrivere semplicemente l'idsession su database.. non elimina la normale gestione delle sessione con l'uso di cookie su server giusto? fare una cosa del genere avrebbe una qualche utilità? di che tipo?
Ma questo non sarebbe una vera gestione su db delle sessioni... o sbaglio?Ho trovato questo script
culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/Se non ho capito male, una gestione delle sessioni su db, elimina del tutto i cookie su server.. e gestisce tutto su db.
DOMANDA 3: la funzione serve appunto per dire al server di gestirle tramite db o sbaglio?
su db si avrà quindi una tabella con i seguenti campi giusto?- ID: contatore
- IDUTENTE: id della tblutente
- IDSESSION: id di sessione
- DATATIME: data e ora della sessione (per capire quando scade)
- DATISESSION: dati serializzati salvati in sessione
-
Se chiudi il browser e lo riapri la sessione si mantiene oppure no in base a come è settato sul server la session.cookie_lifetime, se è 0 vuol dire che si elimina automaticamente quando chiudi il browser, altrimenti (esempio 600 che sono 10 minuti) si elimina dopo 10 minuti di inattività.
Per aggiungere una funzione di auto login o come hai detto tu un ricorda (il solito quadratino bianco da spuntare) bisogna fare attenzione alla sicurezza e quindi a come scrivere nel miglior modo possibile il tuo script.
Il salvataggio delle sessioni su database è una buona cosa, e ti viene in aiuto una classe php di nome sessionHandler che ha il compito di gestire la sessione, ecco alcuni link utiliphp.net/manual/en/class.sessionhandler.php
php.net/manual/en/class.sessionhandlerinterface.phpopen: è il collegamento al database
close: chiude la sessione con il database
read: cerca nel database se è presente la sessione
write: aggiorna la sessione
destroy: è il logout
gc (garbage collection) serve per non sprecare risorse inutilmente, e con una certa probabilità (puoi settarli tu i valori, di base se non ricordo male è 1 su 1000) fa in modo di cancellare tutte le sessioni ormai scadutequesta è una lettura che secondo me ti aiuterà a capire meglio il funzionamento dell'auto login
qui puoi trovare spiegazioni in merito all'autenticazione con degli esempi
stackoverflow.com/questions/3128985/php-login-system-remember-me-persistent-cookie
Se hai dubbi su qualcosa chiedi pure