PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Javascript » deconnexion automatique du site » 12-01-2015 12:27:05

Merci de tes conseils, la déconnexion auto avec la gestion des onglets fonctionne, même si je n'est pas utilisé tes techniques smile

timerDeco.php:

 <?php
$_SESSION['timer']= time() + 2400;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml2.dtd">
 <script type="text/javascript">

 setInterval("deco()", 3000);
function connexion()
  {
    var xhr_object = null;
    if(window.XMLHttpRequest) // Firefox
      xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject) // Internet Explorer
      xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else { // XMLHttpRequest non supporté par le navigateur
      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    return;
      }
      return xhr_object;
  }
function deco()
{
  var timeNow = new Date().getTime();
  timeNow = timeNow * 0.001;
  timeNow = Math.floor(timeNow);

  var xhr_object=connexion();
      xhr_object.open('POST',"../RetourTimer.php",false);
      xhr_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      xhr_object.onreadystatechange=function(){
        if(xhr_object.readyState == 4)
        {
          if (xhr_object.responseText=="DECONNECTER")
          {
            window.location='../index.php';
          }
          else if (timeNow >= xhr_object.responseText)
          {
            window.location='../index.php';
          }
        }
      }
      xhr_object.send("" ,true);
}

</script>

RetourTimer.php

<?php
session_start();
if(isset($_SESSION['timer']))
echo $_SESSION['timer'];
else echo "DECONNECTER";
?>

Merci smile

#2 Re : Javascript » deconnexion automatique du site » 12-01-2015 12:27:05

Merci de ta réponse.
Je me suis renseigné sur le localstorage et cela fonctionne avec le HTML5. Tous les navigateurs ne sont pas compatible actuellement, ce qui rend cette méthode peu pratique.
Pourrait-tu m'en dire plus sur le "ping" de la session. Je ne comprend pas vraiment.

ps: J'ai encore modifié mon include, je suis déçu je pensais vraiment que ça allait marcher en changeant ma variable avec une autre de session.

 <?php
  // ajoute 15min au timestamp
$_SESSION['timer']= time() + 60;
?>

 <script type="text/javascript">

 setInterval("deco()", 10000);

function deco()
{
  // convertie timestamp js (milliseconde) en seconde
  var timeNow = new Date().getTime();
  timeNow = timeNow * 0.001;
  timeNow = Math.floor(timeNow);

  //récupère le timestamp php
  var timeExpire = '<?php echo $_SESSION['timer']; ?>' ;
  if (timeNow >= timeExpire)
  {
    window.location='../index.php';
  }
}
 </script>

#3 Javascript » deconnexion automatique du site » 12-01-2015 12:27:05

jrm2010
Réponses : 6

Bonjour,
J'ai actuellement besoin de déconnecter un utilisateur lorsqu'il est inactif durant un certain temps.
Pour cela j'ai pensé include une page dans toutes mes autres pages php.

Voici la page que j'include:

 <?php
 // ajoute 15min au timestamp
$timeExpire = time() + 900;
?>

 <script type="text/javascript">
boucleTime();
function boucleTime()
{
  settimeout(deco(),10000);
  cleartimeout(settimeout);
}

function deco()
{
  // convertie timestamp js (milliseconde) en seconde
  var timeNow = new Date().getTime();
  timeNow = timeNow * 0.001;
  timeNow = Math.floor(timeNow);

  //récupère le timestamp php
  var timeExpire = '<?php echo $timeExpire; ?>' ;
  if (timeNow >= timeExpire)
  {
    window.location='../index.php';
    alert("Vous avez été inactif durant un certain temps, veuillez vous reconnecter svp.");
  }
}
 </script>

Normalement, je récupère le timestamp en php, auquel j'ajoute un certain temps avant que la session expire.
Je récupère ce timestamp dans mon code javascript et avec un settimeout, toutes les 10 secondes je compare le timestamp javascript avec celui du php.
Me renvoyer sur index.php me déconnecte automatiquement.

Si quelqu'un a la solution à mon problème, je suis preneur smile
Merci.

EDIT: J'ai réussi! Le problème c'est que maintenant si j'ouvre deux onglets et que sur une je suis inactif, cela va me détruire ma session. Comment faire pour contourner cela ? (Utiliser autre chose que session_destroy sur ma page index.php ?)

ps: Le code de mon include:

 <?php
 // ajoute 15min au timestamp
$timeExpire = time() + 900;
?>

 <script type="text/javascript">
setInterval("deco()", 10000);

function deco()
{
  // convertie timestamp js (milliseconde) en seconde
  var timeNow = new Date().getTime();
  timeNow = timeNow * 0.001;
  timeNow = Math.floor(timeNow);

  //récupère le timestamp php
  var timeExpire = '<?php echo $timeExpire; ?>' ;
  if (timeNow >= timeExpire)
  {
    alert("Vous avez été inactif durant un certain temps, veuillez vous reconnecter svp.");
    window.location='../index.php';
  }
}
 </script>

Pied de page des forums

Propulsé par FluxBB