• User

    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

  • User

    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 utili

    php.net/manual/en/class.sessionhandler.php
    php.net/manual/en/class.sessionhandlerinterface.php

    open: è 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 scadute

    questa è una lettura che secondo me ti aiuterà a capire meglio il funzionamento dell'auto login

    jaspan.com/improved_persistent_login_cookie_best_practice

    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