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...