如何在会话过期时自动刷新页面并重定向到登录页面(PHP)

时间:2016-10-21 07:04:43

标签: php session login reload logout

请原谅,我知道有关于此问题的堆栈溢出有一些问题,但我找不到任何适合我的问题的解决方案。我有一个问题,当会话过期时,页面没有自动重新加载。请帮忙。谢谢!任何帮助,将不胜感激。

这是我尝试过的代码,$_SESSION['created'] = time();

if((time() - $_SESSION['created']) > 600) {
    header("Refresh: 1;url='logout.php'");
} else {
    $_SESSION['created'] = time();
}

1 个答案:

答案 0 :(得分:1)

根据您的需要,您必须在会话有效时每秒检查一次会话,或者不在服务器端检查会话,所以做这样的事情。

1)每隔一秒创建一个javascript和ajax用于检查会话是否已过期

2)session.php页面检查有效会话是否

3)然后根据触发器返回1或-1,它会自动将location.reload()函数移动到logout.php,因为你的顶级条件现在变为真。

<强> session.php文件

        <?php

            session_start();


            if(!isset( $_SESSION['created'] ) || (time() - $_SESSION['created']) > 600) {

                session_destroy();

                echo "-1";

            } else {

                echo "1";

            }

        ?>

将此javascript粘贴到每个页面

Java脚本:

        <script type="text/javascript">

                function session_checking()
                {
                    $.post( "session.php", function( data ) {

                        if(data == "-1")
                        {
                            alert("Your session has been expired!");
                            location.reload();
                        }

                    });
                }

                var validateSession = setInterval(session_checking, 1000);

    </script>

此代码应该是每个页面顶部

if(!isset( $_SESSION['created'] ) || (time() - $_SESSION['created']) > 600)   {
header("Refresh: 1;url=logout.php");
} else {
$_SESSION['created'] = time();
}
相关问题