会话超时后自动显示警报消息,无需手动刷新页面

时间:2017-09-14 09:17:31

标签: javascript php html

我有一个关于如何自动显示提醒信息的问题。我已将时间限制设置为10秒,但我需要手动刷新页面,然后会弹出警报消息。将显示的警报消息将告诉用户会话已结束并重新加载页面。这是我的代码

<?php
        //start session
        session_start();

        //database connection
        $conn = mysqli_connect("localhost","root","","test"); 

        //default timezone
        date_default_timezone_set('Asia/Kuala_Lumpur');

        //if user click login button
        if(!empty($_POST["login"])) 
        {
            //query table to verify inserted value
            $result = mysqli_query($conn,"SELECT * FROM users WHERE username = '" . $_POST["user_name"] . "' and password = '". $_POST["password"]."'");

            //fetch result result row as an associative, a numeric array, or both
            $row  = mysqli_fetch_array($result);

            //if it is true
            if($row) 
            {
                //declare a session for selected value using id and time logged in
                $_SESSION["user_id"] = $row['id']; 
                $_SESSION['timestamp'] = time();            
            } 
            else 
            {
                //redirect to homepage
                echo '<script type="text/javascript">alert("Invalid Username or Password!");window.location = "userlogin_session.php";</script>';
            }
        }

        //check for session timeout
        if(isset($_SESSION['timestamp']))
        {
            //set time limit in seconds
            $expireAfterSeconds = 10;

            //calculate many seconds have passed since the user was last active 
            $secondsInactive = time() - $_SESSION['timestamp'];

            //convert seconds into minutes
            $expireAfter = $expireAfterSeconds / 60 ;

            //check to see if time is equals or above given time limit
            if($secondsInactive >= $expireAfter)
            {
                //kill session.
                session_unset();
                session_destroy();

                //redirect to homepage
                echo '<script type="text/javascript">alert("Session Over");window.location = "userlogin_session.php";</script>';
            }
        }

        //if user click logout button
        if(!empty($_POST["logout"])) 
        {
            //kill session.
            session_unset();        
            session_destroy();
        }
    ?>

2 个答案:

答案 0 :(得分:1)

您需要在Javascript中执行此操作,而不是PHP。然而,您可以将PHP var发送到javascript,或者只是对其进行硬编码(秒* 1000),然后将其发送到警报或模态窗口:

setTimeout(function(){
   alert ('Session timeout message or code here');
}, <?= $timeout; ?>);

答案 1 :(得分:0)

这是我的完整代码。

<?php
        //start session
        session_start();

        //database connection
        $conn = mysqli_connect("localhost","root","","test"); 

        //default timezone
        date_default_timezone_set('Asia/Kuala_Lumpur');

        //if user click login button
        if(!empty($_POST["login"])) 
        {
            //query table to verify inserted value
            $result = mysqli_query($conn,"SELECT * FROM users WHERE username = '" . $_POST["user_name"] . "' and password = '". $_POST["password"]."'");

            //fetch result result row as an associative, a numeric array, or both
            $row  = mysqli_fetch_array($result);

            //if it is true
            if($row) 
            {
                //declare a session for selected value using id and time logged in
                $_SESSION["user_id"] = $row['id']; 
                $_SESSION['timestamp'] = time();            
            } 
            else 
            {
                //redirect to homepage
                echo '<script type="text/javascript">alert("Invalid Username or Password!");window.location = "userlogin_session.php";</script>';
            }
        }

        //check for session timeout
        if(isset($_SESSION['timestamp']))
        {
            //set time limit
            $expireAfterSeconds= 10;

            //calculate many seconds have passed since the user was last active 
            $secondsInactive = time() - $_SESSION['timestamp'];
            echo $secondsInactive;

            //check to see if time is equals or above given time limit
            if($secondsInactive >= $expireAfterSeconds)
            {
                //kill session.
                session_unset();
                session_destroy();

                //redirect to homepage
                //echo '<script type="text/javascript">alert("Session Over");window.location = "userlogin_session.php";</script>';
            ?>
                <script>
                    alert("Session Over");
                    window.location = "userlogin_session.php";
                </script>';
            <?php
            }
        }

        //if user click logout button
        if(!empty($_POST["logout"])) 
        {
            //kill session.
            session_unset();        
            session_destroy();
        }
    ?>
    <html>
        <head>
            <title>User Login</title>
        </head>
        <body>
            <?php 
                //if session not exist
                if(empty($_SESSION["user_id"])) 
                { 
                ?>
                    <form action="" method="post" id="frmLogin">
                        <div><?php if(isset($message)) { echo $message; } ?></div>  
                        <div>
                            <div><label for="login">Username</label></div>
                            <div><input name="user_name" type="text"></div>
                        </div>
                        <div>
                            <div><label for="password">Password</label></div>
                            <div><input name="password" type="password"> </div>
                        </div>
                        <div>
                            <div><input type="submit" name="login" value="Login"></span></div>
                        </div>       
                    </form>
                <?php 
                }

                //if session exist
                else 
                { 
                    $result = mysqli_query($conn,"SELECT * FROM users WHERE id = '" . $_SESSION["user_id"] . "'");
                    $row  = mysqli_fetch_array($result);
                ?>  
                    <form action="" method="post" id="frmLogout">
                        <div>
                            Welcome <?php echo ucwords($row['username']); ?>, You have successfully logged in!<br>Click to <input type="submit" name="logout" value="Logout">
                        </div>
                    </form>
                    </div>
                    </div>
                <?php 
                } 
            ?>
        </body>
    </html>