how to make countdown timer to not reset on page refresh

前端 未结 4 953
无人及你
无人及你 2021-01-27 17:18

I am creating an online exam page for my project. I have a countdown timer, but it resets on page refresh. How can I make it not to reset? The timer is set by fetching time from

相关标签:
4条回答
  • 2021-01-27 17:48

    Page refresh doesn't matter if you have the Timer's "start-time" saved in your database for particular user.

    Fetch this "start-time" from database and compute it to get the consumed time and accordingly show the remaining or elapsed time.

    0 讨论(0)
  • 2021-01-27 17:58

    You'll probably need to register a table like active_exams with an examId field and datetimeStarted. Then load the timer as the number of seconds for that exam since it was started.

    You may be able to create some workaround with cookies, localStorage or even the session but keep in mind those will be modifiable (or at least forgettable in the case of the session) by the user.

    0 讨论(0)
  • 2021-01-27 17:59

    When the user starts the exam, save the start time in the database. Use that for everything. Don't rely on client side code for this as the user can easily modify it.

    If you save the start time, you know when the user started and what the current time is. You can use that to see if time is up or not. A javascript timer is good to show how much time is remaining, but it should be getting that info from the database.

    0 讨论(0)
  • 2021-01-27 18:07

    You should read the value into session variable and using that afterwards:

    <?php
    session_start();
    if (isset($_SESSION['targetdate'])) {
        // session variable_exists, use that
        $targetDate = $_SESSION['targetdate'];
    } else {
        // No session variable, red from mysql
        $result=mysql_query("select * from test where testid='29' LIMIT 1");
        $time=mysql_fetch_array($result);
        $dateFormat = "d F Y -- g:i a";
        $targetDate = time() + ($time['duration']*60);
        $_SESSION['targetdate'] = $targetDate;
    }
    
    $actualDate = time();
    $secondsDiff = $targetDate - $actualDate;
    $remainingDay     = floor($secondsDiff/60/60/24);
    $remainingHour    = floor(($secondsDiff-($remainingDay*60*60*24))/60/60);
    $remainingMinutes = floor(($secondsDiff-($remainingDay*60*60*24)-         ($remainingHour*60*60))/60);
    $remainingSeconds = floor(($secondsDiff-($remainingDay*60*60*24)-    ($remainingHour*60*60))-($remainingMinutes*60));
    $actualDateDisplay = date($dateFormat,$actualDate);
    $targetDateDisplay = date($dateFormat,$targetDate);
    
    ?>
    
    0 讨论(0)
提交回复
热议问题