javascript - session 超时后自动显示警报消息,无需手动刷新页面

标签 javascript php html

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

<?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();
        }
    ?>

最佳答案

您需要使用 Javascript 而不是 PHP 来完成。但是,您可以将 PHP var 发送到 javascript,或者只是对其进行硬编码(秒 * 1000),然后将其发送到警报或模式窗口:

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

关于javascript - session 超时后自动显示警报消息,无需手动刷新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46215125/

相关文章:

php - 删除语句没有给出错误,但也不起作用

php - 限制 wordpress 模板默认搜索中的最小字符数

javascript - 如果另一个可观察量在 RxJS 中有数据,如何忽略一个可观察量中的所有数据?

javascript - for 循环中的条件语句简单如 i

javascript - 正则表达式从链接中删除除文件名之外的所有内容

php - 收到带有新域名的 'Could Not Find Driver' 消息

Java HttpPost 到 php 页面

php - 如何显示 Joomla 组件列表中的默认类别?

jquery - 如何在左侧 div 超出屏幕的情况下左右滚动页面

javascript - 使用jquery获取div的内容(复制)