Visualizzazione risultati 1 fino 9 di 9

Discussione: Session expires dopo tot minuti

  1. #1
    Guest

    Predefinito Session expires dopo tot minuti

    Come gestite voi la scadenza della sessione dopo tot minuti di inattività, calcolando che il reload della pagina non deve essere considerato un momento di attività...A capirci eseguo funzionalità giro nel sito ok, faccio attività, sto fermo non faccio niente per 10 minuti se faccio un'attività o faccio un reload della pagina e però sono passati 10 minuti dall'ultima attività, session_destroy().
    Voi come la gestite?

  2. #2
    Guest

    Predefinito

    Suppongo ajax dopo 10 min con setInterval

  3. #3
    Guest

    Predefinito

    Ehh ma con Ajax come fai?Devi recuperare un time di ultima attività ed aggiornalo ad ogni attività effettuata e poi dopo 10 minuti devi calcolare il tempo attuale - il tempo dell'ultima attività e non deve superare 10 minuti, cioè alle 18 faccio un salvataggio in tabella sul DB questa è un'attività poi alle 18.09 faccio una modifica al DB sono passati 9 minuti quindi è accettabile, quindi quando Ajax fa la chiamata alle 18.10 deve tenere in considerazione le 18.09 e quindi non deve buttare fuori l'utente...
    Non è forse meglio tutto in PHP?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Concordo con fractalcosmo sul non utilizzare setInterval. Un'alternativa consiste nel crearsi un meccanismo di timeout usando la sessione stessa.

  5. #5
    Guest

    Predefinito

    Ehh infatti non c'è una soluzione usando una funzione di PHP perchè fondamentalmente o ti scadono i cookie ma la sessione potrebbe essere ancora attiva oppure fai un maxlifetime della session, però questo non è quello che si vuole ottenere, la sessione deve tenere in considerazione l'ora nella quale è avvenuta l'ultima operazione e calcolare il tempo di inattività sempre in base all'ora dell'ultima operazione.
    Volevo sapere se voi avevate fatto in qualche modo particolare, io ho fatto come segue:
    In entrata dell'utente mi salvo una variabile di sessione il tempo di login però me lo salvo con l'ora vera e propria date('G:i'):

    Il mio array di sessione:
    Codice PHP:

    $datiUtente
    = array('idUtente'=>$idUtente,
    'username'=>$usernameDB,
    'profilo'=>$profilo,
    'stringaLogin' => $stringaLogin,
    'timeLogin' => date('G:i')
    Poi cosa faccio?Nel mio progetto ci sono file che sono inclusi in tutte le pagine, possono essere i file di configurazione o semplicemente l'HEADER, ogni volta che si fa un'operazione sul DB e quindi salvataggio e poi visualizzazione del DB la pagina viene comunque ricaricata e si passa sempre per questi file, nell'header ad esempio viene inclusa il menù a discesa questo è in tutte le pagine, quindi cosa ho fatto in una di queste pagine che viene appunto sempre inclusa...Ho fatto quanto segue, mi recupero il tempo che ho salvato nella variabile di sessione e poi lo confronto sempre con il tempo ATTUALE faccio i calcoli e se non sono passati 10-15-20 minuti procedo e riaggiorno la variabile di sessione con il tempo corrente.
    Esempio sono le 18 faccio un'operazione di salvataggio su DB, la variabile di sessione prenderà il valore 18:00 poi passano 5 minuti quindi sono le 18:05 il tempo locale è 18:05 mentre la variabile di sessione time è impostata alle 18:00 faccio la sottrazione 05-00 = 5 quindi non sono passati 10 minuti(ovviamente anche le ore contano) quindi permetto di proseguire e subito dopo aggiorno la variabile di sessione alle 18:05, questo è fondamentalmente il tempo di ultima attività eseguita.In soldoni dopo aver impostato la variabile di sessione faccio quando segue:

    Codice PHP:
    //Funzione di security session e check login
    security_session();
    checkLogin();

    //----------Tempo session, recupero i minuti e le ore dalla variabile di sessione--------------------
    $tempo = $_SESSION['timeLogin'];
    $tempoExplode = explode(':', $tempo);
    $oraSession = $tempoExplode[0];
    $minutiSession = $tempoExplode[1];

    //----------tempo locale, recupero i minuti e le ore attuali---------------------
    $oraLocale = date('G:i');
    $oraLocaleExplode = explode(':', $oraLocale);
    $oraLocaleOre = $oraLocaleExplode[0];
    $oraLocaleMinuti = $oraLocaleExplode[1];

    $tempoSessione = $minutiSession;
    $tempoLocale = $oraLocaleMinuti;

    //print $tempoSessione;print '<br>';
    //print $tempoLocale;print '<br>';
    //print ($oraLocaleOre-$oraSession);
    //var_dump($tempoLocale-$tempoSessione >1);

    //Faccio il controllo che i minuti attuali meno i minuti di sessione e l'ora sia la stessa non superi 30 minuti
    if( ($tempoLocale-$tempoSessione) > 29 || ($oraLocaleOre-$oraSession) != 0){
    security_session();
    session_unset();
    session_destroy();
    ob_start();
    header("location: ../view/login.php");
    ob_end_flush();
    include
    '../view/login.php';
    exit();
    }


    //riaggiorno la variabile di sessione con l'ora attuale al prossimo rientro se l'utente non fa niente, la variabile di sessione
    //rimane all'ora che imposto adesso mentre l'ora attuale procederà quindi rientro sopra e faccio il calcolo se sono passati 30 minuti oppure no.
    $_SESSION['timeLogin'] = date('G:i');
    Altre soluzioni, apprezzate...

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Fondamentalmente avrei usato lo stesso approccio.
    L'unica differenza riguarda l'uso dei timestamp al posto degli orari "espliciti", in modo da rendere immediato il calcolo dei minuti passati:
    Codice PHP:
    if ((time() - $_SESSION['timeLogin']) / 60 > 30) {
    Ma dal punto di vista della logica non cambia nulla.

    Al limite si potrebbe incapsulare in una funzione o in un oggetto. Utile nel momento in cui la gestione della sessione diventi articolata (ovvero: oltre al meccanismo di timeout ce ne sono altri che possono o meno essere richiesti nelle pagine), ma fin tanto che lo scopo è "solo" questo non ne vedo il vantaggio.

  7. #7
    Guest

    Predefinito

    Alla fine allora va bene così dai...ma crearsi la funzione è meglio secondo me, io tendo sempre a lavorare a blocchi, però come soluzione va bene...Grazie ciao buona serata.

  8. #8
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    per recuperare il tempo di vita di un'unica sessione (poiché non puoi recuperare con il nome) potresti utilizzare
    Codice PHP:
    <?php
    $lifetime
    =10;
    if(((
    $var = session_get_cookie_params()) != 0 AND $var['lifetime']) <= $lifetime){
    print_r($var['lifetime']);
    }
    ?>
    . Adesso vado fuori argomento,io creando una sessione registrata (cioè un array $_SESSION['name'] = 0; con valore) non riesco a vederlo come Set-Cookie: name=0 ma php mi imposta $_
    PHPSESSID e il suo hash id.. devo utilizzare session_name='name'; e session_id=0;. Come faccio ad impostare $_SESSION['name']=0; a livello di cookie e non semplicemente un array con valore?
    Ultima modifica di darbula : 09-03-2016 alle ore 22.52.54

  9. #9
    Guest

    Predefinito

    Ciao Darbula, vuoi impostare un cookie, giusto?con setcookie e lo recuperi con $_COOKIE...biscotto :) Ciao buona serata

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •