Выйти из системы после успешного вызова AJAX - PullRequest
0 голосов
/ 01 мая 2020

У меня есть код ajax, как показано ниже, в котором я хочу выйти из системы после определенного периода времени бездействия. Код ниже находится внутри файла mno. php (оба javascript и php). Мой код для входа / выхода находится внутри файла mno. php.

Я считаю, что мне нужно внести изменения в Строка A . Вместо {action:'logout'} я попробовал с {'logout'}, но он все еще не работает. Мой код для входа и выхода находится внутри mno. php.

<?php
if(isset($_GET['action'])  && $_GET['action'] == "logout")  {
    unset($_SESSION['pageadmin']);
    header('location: /abc/mno.php.php');
    exit();
}
?>


<script>
jQuery(document).ready(function ($) {

    let lastActivity = <?php echo time(); ?>;  

    let now = <?php echo time(); ?>;

    let logoutAfter = 10;

    let timer = setInterval(function () {
        now++;
        let delta = now - lastActivity;
        console.log(delta);
        if (delta > logoutAfter) {
            clearInterval(timer);
            //DO AJAX REQUEST TO close.php
            $.ajax({
                url: "/abc/mno.php",
                type: 'GET', 
                data: {action:'logout'},           // Line A
                success: function(data){
                console.log(data); // Line B
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(textStatus);
                }
            });
        }
    }, 1000);
});
</script>

Постановка проблемы:

Мне интересно, какие изменения мне нужны сделать в строке A или в php, чтобы страница выходила из системы после 10 секунд бездействия или в любое другое время, которое мы установили.

Редактировать 1: Я поместил console.log (data) в Строка B . На консоли я получаю HTML моей страницы входа, но страница все еще не выходит из системы. Мой код страницы входа находится внутри mno. php. При выполнении console.log (data) на консоли я получаю следующее:

<form action="/abc/mno.php" method="post">
        <div style='width:400px;'>
            <input type="hidden" id="user_login" name="user_login" value="1">
            <fieldset>
                <legend>Login</legend>
                                <div>
                    <label for="user_name">User Name</label>
                    <input type="text" name="user_name">
                </div>
                <div>
                    <label for="user_pass">Password</label>
                    <input type="password" name="user_pass">
                </div>
                <div>
                    <button type="submit">Login</button>
                </div>
            </fieldset>
        </div>
</form>

Edit 2: Я заменил /mno.php на /abc/mno.php

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Поскольку вы использовали ajax после обработки, ответ должен быть возвращен обратно к ajax, и теперь ваш код отправляет обратно данные html, равные mno.php, поскольку вы не можете перенаправить из своего кода php Вместо этого сделайте следующее:

Ваш ajax код:

 $.ajax({
  url: "test.php",
  type: 'GET',
  data: {
    action: 'logout'
  }, // Line A
  success: function(data) {
  //checking if data coming from php is "success"
    if (data === "success") {
    //to redirect
      window.location.href = "login_page_to_redirect";
    }else{
     alert("error");
   }
  },
  error: function(xhr, status, error) {
    console.log(xhr.responseText);
    console.log(error);
    console.log(status);
    console.log(xhr);
  }
});

Ваш php код:

if(isset($_GET['action'])  && $_GET['action'] == "logout")  {
    unset($_SESSION['pageadmin']);
   //this will send back to ajax
   echo "success";
  }else{
  echo "error";
  }
0 голосов
/ 01 мая 2020

Я попробовал точный код, и по истечении заданного времени он заработал. ajax url - это сам URL файла (включая вызовы php и ajax).

test. php:

<?php
if(isset($_GET['action'])  && $_GET['action'] == "logout")  {
    echo 'logged out';
}
?>

<script src="js/jquery-min.js"></script>
<script>
jQuery(document).ready(function ($) {

    let lastActivity = <?php echo time(); ?>;  

    let now = <?php echo time(); ?>;

    let logoutAfter = 10;

    let timer = setInterval(function () {
        now++;
        let delta = now - lastActivity;
        console.log(delta);
        if (delta > logoutAfter) {
            clearInterval(timer);
            //DO AJAX REQUEST TO close.php
            $.ajax({
                url: "test.php",
                type: 'GET', 
                data: {action:'logout'},           // Line A
                success: function(data){
                console.log(data); // Line B
                },
                error: function(xhr, status, error) {
                    console.log(xhr.responseText);
                    console.log(error);
                    console.log(status);
                    console.log(xhr);
                }
            });
        }
    }, 1000);
});
</script>

I получите 'logged out' из php вместе с остальным содержимым файла. поэтому вы должны иметь возможность выполнить функцию выхода из системы. Возможно, проверьте, правильно ли указан ваш URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...