Código PHP:
function is_logged() {
mysqli_report(MYSQLI_REPORT_OFF);
if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])) {
echo "Tengo una session iniciada: ".$_SESSION['user_id']."<br>";
$ss_query = "SELECT * FROM site_session WHERE user_id=".$_SESSION['user_id'];
$ss_result = $this->mysql[1]->query($ss_query);
if($ss_result->num_rows == 1) {
$site_session = $ss_result->fetch_array(MYSQLI_ASSOC);
echo "Tengo una tabla de Sessiones: ".$site_session['session_id']."<br>";
$ultima_actividad = strtotime($site_session['last_activity']);
$tiempo_actual = strtotime('now');
$diferencia = $ultima_actividad - $tiempo_actual;
$diferencia_minutos = intval($diferencia / 60);
if ($diferencia_minutos < 15) {
echo "cierro session<br>";
return False;
} else {
echo "Hago el update";
$add_time = strtotime($site_session['last_activity']) + 900;
$new_date = date('Y-m-d H:i:s', $add_time);
$ss_update = "UPDATE site_session SET last_activity='$new_date' WHERE user_id=".$_SESSION['user_id'];
$this->mysql[1]->query($ss_update);
echo "Le agregué tiempo a la tabla<br>";
return True;
}
}
} else {
echo "No tengo una tabla de Sessiones.<br>";
return False;
}
Aclaraciones:
1.- "$this->mysql[1]" hace referencia a una lista, dónde retorno la conexión en otro método.
2.- Los "echo" que hay por todo el método estan a modo de debug.
Introducción:
Al iniciar session se genera un registro en una tabla que almacena los usuarios conectados guardando el DATETIME de cuando hizo login y el DATETIME de la "última actividad". Al inicio de la carga de mi sitio web, se llama a este método que "chequea si el usuario está logeado o no".
Problema:
Cada vez que la página se refresca, se agregan 15 minutos a la tabla de session activa de manera ilimitada haciendo que la session sea tan larga que no expira.
De que manera podría chequear que si el tiempo actual es mayor a 15 minutos desconecte el usuario, pero que sino solo haga el update si ya se actualizó anteriormente o similar.
Agradezco las ideas o la ayuda :)