Javascript 控制会话的持续时间

Javascript 控制会话的持续时间,javascript,php,ajax,Javascript,Php,Ajax,我是web开发的初学者。我花了一些时间来实现用PHP限制会话时间的方法。我读过Stackoverflow的建议,但似乎没有一个适合我(cookies可能由用户编辑,服务器上的AJAX通信额外负载和静态PHP-浏览器中的被动选项卡如何?使用会话变量进行验证) 我认为: <script type="text/javascript"> $(document).ready(function() { setTimeout(function() {

我是web开发的初学者。我花了一些时间来实现用PHP限制会话时间的方法。我读过Stackoverflow的建议,但似乎没有一个适合我(cookies可能由用户编辑,服务器上的AJAX通信额外负载和静态PHP-浏览器中的被动选项卡如何?使用会话变量进行验证)

我认为:

<script type="text/javascript">
    $(document).ready(function() {
        setTimeout(function() {
            window.location.href = 'logout.php';
        }, 10000);
    });
</script>

$(文档).ready(函数(){
setTimeout(函数(){
window.location.href='logout.php';
}, 10000);
});

…以限制用户的会话时间。此系统将用于管理web应用程序。有谁能指出我的方法的潜在缺点,因为它似乎太简单而不好用?

禁用Javascript很容易,并且会阻止它运行。此脚本的问题是每次加载此脚本时,浏览器都会在10秒内转到“logout.php”。当你刷新这个页面的时候,10秒的倒计时也会重新开始。谢谢,到目前为止,对我来说还不错。由于与用户和数据库的动态交互,我的系统将强制用户启用javascript。当用户处于非活动状态10秒(将增加)时,他将注销。因此,如果你在5分钟后打开另一个选项卡,而不关闭另一个选项卡,它将在5分钟后将你注销,而不是在10分钟后。你是对的,但我会避免这种行为。window.onblur location.reload能帮我解决这个问题吗?谢谢你的回答,但我认为你的方法不适用于浏览器中的被动选项卡。某些操作应该会触发此脚本。为什么不尝试使用ajax方法呢。您可以将此脚本放入ajax调用中,并可以在每次被动选项卡单击时检查会话值
<?php
 function check_user_is_valid () {
    //Start our session.
    session_start();

    //Expire the session if user is inactive for 30
    //minutes or more.
    $expireAfter = 30;

    //Check to see if our "last action" session
    //variable has been set.
    if(isset($_SESSION['last_action'])){

        //Figure out how many seconds have passed
        //since the user was last active.
        $secondsInactive = time()-$_SESSION['last_action'];

        //Convert our minutes into seconds.
        $expireAfterSeconds = $expireAfter * 60;

        //Check to see if they have been inactive for too long.
        if($secondsInactive >= $expireAfterSeconds){
            //User has been inactive for too long.
            //Kill their session.
            session_unset();
            session_destroy();
        }
    }
} 

//Assign the current timestamp as the user's
//latest activity
$_SESSION['last_action'] = time();