-1

我正在设计一个网站,里面有一个小游戏。每个参与的用户有 99 分钟的时间来完成它,否则我们会显示游戏结束状态。到目前为止,这是我使用 jQuery post 所做的。

我已经能够显示计时器。在 PHP 中,我已将目标时间设置为99*60秒,但我无法将开始时间设置为 0,因为我将在这些值与倒计时值之间做出差异。

此外,由于每个用户都可以退出页面,因此我希望能够存储他们离开的时间。我所能做的就是在他们注销时将倒计时值(比如 5845)存储在数据库中。尽管我尝试在每次调用 jQuery 帖子时更新表格,但这只会让情况变得更糟。

这是我的 jQuery:

function countdown() {
  var i = (new Date().getTime() / 1000) + (99 * 60);

  setTimeout(function () {
    $.post(\'countdown.php\',{target:i},function(data){
      $('#countdown').html(data);
    });
    countdown();
  },1000);
}

countdown();

这是PHP:

if (!empty($resm['Countdown']) || $resm['Countdown'] >= 0) {
  $target = (99 * 60);
  $countdown = ($target - $current);
  $_SESSION['currenttime'] = $countdown;
  $hours = floor($countdown / 3600);
  $min = floor($countdown / 60);
  $r_min = floor(($countdown - ($hours * 3600)) / 60);
  $sec = floor($countdown - ($min * 60));
  if ($min == 0) {
    echo $target.'   '.$current.'  '.$countdown;
    echo '<br/>'.$min.' minutes '.$sec.' seconds left';
  } else {
    echo 'Time Over';
    $sql = "UPDATE bs10000099 SET Upgradedlevel='2',Activated='2',Countdown='5940' WHERE        MemberID='$memberid'";
    mysql_query($sql);
  }
}

我不知道如何设置开始时间或如何防止countdown()在刷新页面上重新启动。

4

1 回答 1

0

我不确定您想要什么样的安全性,但是从 Javascript 获取时间并不是真正安全的,因为 JS 从计算机而不是服务器获取时间。

以您的示例为例,我可以玩游戏,等到还剩 10 分钟,然后在我的桌面上回滚时间,它就会重置。或者回滚一年,还剩 100000 分钟!

我建议你使用服务器时间。

这是我要做的:

测试开始时,获取 UNIX 时间 + 90 分钟。这会给你最后的时间。

PHP

    if (!isset($_SESSION['end'])) {
        $_SESSION['end'] = strtotime("+90 minutes");
    }


    $remaining = $_SESSION['end'] - time();

    if ($remaining > 0) {
        echo json_encode(array(
            "remaining" => $remaining
        ));
    } else {
        // finished! write code here. 
    }

然后,您可以执行一个简单的 $.getJSON() 来获取剩余的秒数并显示它。

由于您保留了“结束”时间,因此即使用户离开,计时器也会继续。

于 2012-12-20T16:40:28.823 回答