使用jQuery调用php注销脚本


Call to a php logout script using jQuery

如果半小时内没有活动,我希望我的用户自动注销网站。(您在下面看到的代码设置为70秒,而不是1/2小时)。我意识到我需要的是使用jQuery。。。我对这个非常陌生。。。加载我的php脚本。(我做这件事太久了)这就是我到目前为止所做的。

这在我的首页。

var log_me_out = true;
setTimeout(function(){
    $.post({
        url: "check_time.php",
        //data: optional, the data you send with your php-script
        success:function(){
            if(log_me_out == 'yes'){
                 window.location = 'index_test.php';
            }
        }
    })
 }, 80000);
</script>

这是我的check_time.php页面

<script type="text/javascript">
var log_me_out = true;
</script>
<?php
include('pagetoretrivepassword.inc.php');
    session_start();
    if($_SESSION['admin_login'] != $password){ 
        session_unset();
        session_destroy();
        ?>
        <script type="text/javascript">
         log_me_out = 'yes';
        </script>
        <?php
    }else{
        ?>
        <script type="text/javascript">
         log_me_out = 'no';
        </script>
        <?php
    }
?>

我觉得不错,但我建议简化一下。最好的方法是使用setTimeout函数中的代码,并在其中检查用户上次活动的时间。因此,设置一个像"lastActive"这样的变量,并使用类似的东西:

$(document).click(function(){ 
    var currentTime = new Date();
    lastActive = currentTime.getSeconds();        
});

然后在您的setTimeout函数中,您可以执行以下操作:

var currentTime = new Date();
if(lastActive + 5000 < currentTime.getSeconds()){
    //If user hasn't been active for 5 seconds...
    //AJAX call to PHP script
}else {
    setTimeout(theSameFunction(),5000);
}

然后在PHP中简单地销毁会话,成功回调函数应该简单地具有:

window.location = 'index_test.php';

发送用户。

您在php文件上编写的javascript将不会执行。要知道php脚本的作用,请使用以下代码:

Javascript:

$.post('check_time.php', function(data)
{
    if(data == 'yes')
    {
         window.location = 'index_test.php';
    }
});

Php:

session_start();
if($_SESSION['admin_login'] != $password)
{ 
    session_unset();
    session_destroy();
    echo 'yes';
}
else
{
    echo 'no';
}

您的代码需要返回可解析的内容,如JSON、XML或HTML。例如,将check_time.php更改为输出以下内容:

<?php
include('pagetoretrivepassword.inc.php');
    session_start();
    header('Content-type: application/json');
    if($_SESSION['admin_login'] != $password){ 
        session_unset();
        session_destroy();
        json_encode(array("log_me_out"=>"true");
    }else{
        json_encode(array("log_me_out"=>"false");
    }
?>

编辑您的HTML以包含这行JQuery代码:

setTimeout(function(){
    $.post("check_time.php", function(d){
            if(d.log_me_out){
                 window.location = 'index_test.php';
            }
    });
 }, 80000);

这个问题在这里得到解决是最后的工作代码

主页上的代码:

ini_set('session.gc_maxlifetime',1800);
ini_set('session.gc_probability',1);
ini_set('session.gc_divisor',1); 
session_start();
if($_SESSION['admin_login'] != $password){
    header('Location: index.php'); 
    exit();
}
if(isset($_SESSION['last_activity']) && (time()-$_SESSION['last_activity'] >1800)){
// last request was more than 30 minates ago
session_destroy();   // destroy session data in storage
session_unset();     // unset $_SESSION variable for the runtime
    header('Location: index.php'); 
    exit();
}
$_SESSION['last_activity'] = time(); // update last activity time stamp
?>

<script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">     
    function timedCount(){        
        $.ajax({
          type: 'POST',
          url: "check_time.php",
          success: function(data){
            if (jQuery.trim(data) == "LOGOUT") {
        window.location = 'LOGOUT.php';
            }
          }
        });
        setTimeout("timedCount()",10000);
     };
</script>

Here is the code on the check_time.php page

<?php
  session_start();
    if (isset($_SESSION['last_activity'])){
        if(time() - $_SESSION['last_activity'] > 1800){
            session_unset();
            session_destroy();
            echo "LOGOUT";  
        }
    }else{
        echo "LOGOUT";
    }
?>