成功进行AJAX调用后注销用户

问题描述 投票:0回答:2

我有一个如下所示的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秒钟不活动或我们设置的任何时间后退出页面。

Edit 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>

编辑2:我已将/mno.php替换为/abc/mno.php

javascript php ajax session logout
2个回答
0
投票

我尝试了确切的代码,并在给定的时间后开始工作。 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>

我从php中获取了“登出”以及文件中其余内容的信息。因此您应该能够执行注销功能。也许检查您的网址是否正确。


0
投票

由于处理响应后必须使用ajax,因此必须将代码返回ajax,现在您的代码正在发送回mno.php的html数据,因为您无法从php代码进行重定向。相反,请执行以下操作:

您的Ajax代码:

 $.ajax({
  url: "test.php",
  type: 'GET',
  data: {
    action: 'logout'
  }, // Line A
  success: function(data) {

    if (data === "success") {
      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";
  }
© www.soinside.com 2019 - 2024. All rights reserved.