TransWikia.com

Control de tiempo de inactividad en ventanas diferentes con PHP y Javascript

Stack Overflow en español Asked by IndiraRivas on November 27, 2021

He estado investigando acerca del cierre de sesiones por inactividad en mi página, lo he logrado con el siguiente código en mi página principal (index.php):

script

<script>
function idleLogout() {
    var t;
    window.onload = resetTimer;
    window.onmousemove = resetTimer;
    window.onmousedown = resetTimer; // catches touchscreen presses
    window.onclick = resetTimer;     // catches touchpad clicks
    window.onscroll = resetTimer;    // catches scrolling with arrow keys
    window.onkeypress = resetTimer;

    function logout() {
        window.location.href = 'logout.php';
    }

    function resetTimer() {
        clearTimeout(t);
        t = setTimeout(logout,140000);  // time is in milliseconds
    }
}
idleLogout();
</script>

y paso la función en body a index.php

<body onunload="idleLogout()"> 

logout.php (destruyo la sesión)

<?php
        session_start();
        session_destroy();
        header( "Location:session_expire.php" );
 ?>

Pero mi index.php tiene funcionalidades que se abren en VENTANAS NUEVAS, entonces, cuando dejo de interactuar en index.html porque estoy en esas VENTANAS, ¿qué hacer para que este tiempo de sesión se resetee? ya que se cierra mi sesión.

One Answer

Lo que podrías hacer, es, cuando pase cierto tiempo, chequear si la ventana del navegador (tu index.php en este caso) está o no activa; sería algo asi

var window_focus;

$(window).focus(function() {
//Retorna true si index.php está en foco
    window_focus = true;
})
    .blur(function() {
//false en caso contrario
        window_focus = false;
    });

Podrías chequearlo de la siguiente manera;

var window_focus;

$(window).focus(function() {
    window_focus = true;
})
    .blur(function() {
        window_focus = false;
    });

  $(document).one('click',function() {
    setInterval(function() { console.log('en foco? ' + window_focus); }, 1000);
    });
Click para empezar<br>

<script src="https://code.jquery.com/jquery-3.3.1.slim.js"
  integrity="sha256-fNXJFIlca05BIO2Y5zh1xrShK3ME+/lYZ0j+ChxX2DA="
  crossorigin="anonymous"></script>

Base la respuesta en un la de user113716 en StackOverflow en Inglés

Saludos!

Answered by Juan Salvador Portugal on November 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP