Skip to content
Advertisement

PHP and jQuery/Ajax auto logout with header(Location)

In my Dashboard.php I call an Ajax Request every 800ms that fetches data from a php file and changes the inner html of an element on my Dashboard.php.

I use it to display a 60 seconds coundown since last activity. Once it reaches 0 it should send the user to logout.php and from there to index.php.

The problem now is that I stay on my page and index.php gets inserted into my div. How can I force it to a site refresh?

Dashboard.php

<script type="text/javascript">
  setInterval(function(){
    getSessionEnd();
  }, 800);
</script>

app.js

var st = document.getElementById("sessiontime");
if (typeof(st) != 'undefined' && st != null){
  sessionEnds();
}

function getSessionEnd() {
  var xhttp;
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
    document.getElementById("sessiontime").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "./assets/ajax/sessionEnds.php");
  xhttp.send();
}

SessionEnds.php

<?php
session_start();
require_once '../../includes/datacon.php';

global $pdo;
$sql = $pdo->prepare('SELECT * FROM userdata JOIN user ON user.id = userdata.uid WHERE username=?');
$sql->bindParam(1, $_SESSION['user']);
$sql->execute();
$sqlu = $sql->fetch( );

$timeS = strtotime($sqlu['lastseen']);
$timeE = strtotime(date("Y-m-d H:i:s", strtotime("+". 1 . " minutes", $timeS)));
$timeD = $timeE - time();
function secondsToTime($seconds) {
    $dtF = new DateTime('@0');
    $dtT = new DateTime("@$seconds");
    return $dtF->diff($dtT)->format('%i minutes and %s seconds');
}
$timeD = secondsToTime($timeD);

if($timeE < time()){
  Header('Location: ../../includes/logout.php');
  exit();
} else {
    echo $timeD;
}
 ?>

Advertisement

Answer

change to

if($timeE < time()){
  echo "0"; // send 0 response
} else {
    echo $timeD;// send time
}

also

if (this.readyState == 4 && this.status == 200) {
if (this.responseText=="0" || this.responseText==" 0"){

    window.location("logout.php");// got to logout page
}
else
    document.getElementById("sessiontime").innerHTML = this.responseText;
    }

Change the code as this give the correct path to logout page.. You need to go to the logout page from the current page in browser.

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement