【问题标题】:variable value on page change页面更改时的变量值
【发布时间】:2013-12-11 06:51:02
【问题描述】:

我是 javascript 和 php 的新手。我正在创建一个管理面板,在其中我可以选择让用户玩游戏。但问题是,每场比赛都有一个特定的时间段,比如 30 分钟。所以,我想要的是,如果用户已经开始游戏,则必须开始倒计时,如果用户一旦从该页面切换到另一个页面,计数器仍然必须计数并且在 30 分钟后它应该结束游戏。

例如,我在http://www.examplec.com/Game1 我的 30 分钟倒计时将开始。如果我从那个页面切换到另一个页面,比如http://www.example.com/order,那么计数器应该仍然计算总时间,当它过期时,结束它并将查询发送到数据库。

如果有人知道解决方案,请回复。我已经找到了使用会话的解决方案,但我想要更有效的解决方案。一个用户可以玩超过 1 个游戏的另一件事。

【问题讨论】:

  • 您可以为您的时间计数维护一个会话变量。
  • 正如@SatishSharma 评论的那样,您可以维护会话或cookie 来跟踪时间。
  • 是的,我在回答中对此进行了解释。等等。
  • @SatishSharma 是的,我有这个想法,我只是想知道是否还有其他问题,您能分享一下您处理会话变量的方式吗?
  • 您可以维护会话或 cookie 以在您的网站上保存该数据。 This is a very good example on how to set session expiry.

标签: javascript php jquery


【解决方案1】:

当你的游戏开始时,像这样设置当前时间的会话

$_SESSION['game_start_time'] = strtotime(date('d-M-Y g:i:s A')); // it will give you complete current timestamp.

现在通过包含在每个页面上检查它

if(isset($_SESSION['game_start_time']))
{
   $game_start_time = $_SESSION['game_start_time'];
   $current_time = strtotime(date('d-M-Y g:i:s A'));
   $time_diff = $current_time - $game_start_time;

   if($time_diff>(30*60))
   {
        //expire 30 minutes your code is here
   }
   else
   {
           // action if require to do when below 30 minutes of game start.
   }   
}

【讨论】:

    【解决方案2】:

    您可以做的是创建一个表来跟踪时间,这不是最有效的方法,但它会很安全。

    因此,使用以下字段创建一个名为 gametrack 的新表:

    id userid gameid timestarted 等等

    因此,当用户开始游戏时,您会插入包含用户信息的记录。

    接下来您需要编辑游戏页面。在游戏页面中,您可以放置​​一个 jquery 代码来请求更新时间。

    function gameStatus(){
         $.ajax({
        url: 'status.php?gid=[GAMEID]',
        success: function(data) {
            if(data == 1) {
                //DO SOMETHING, REFRESH THE PAGE, STOP THE GAME ETC
            }
        }
    });
    }
    
    setInterval("gameStatus()",10000);
    

    上面的代码将每 10 秒请求一次 status.php,您需要将 gameid 传递给文件并假设用户已注册,您可以使用 session 获取用户信息并在 30 分钟后返回 1通过了。

    您可以将此解决方案与 Satish 的回答混合使用会话而不是数据库,并且仍然可以使用上面的 jquery 代码进行实时倒计时。

    【讨论】:

      【解决方案3】:

      你可以用localStorage试试这个

      当你想设置变量时:

      var name = "value";
      localStorage.setItem("someVarName", name);
      

      并且在任何页面中(比如页面加载后),获取如下:

      var Name = localStorage.getItem("someVarName");
      

      浏览器兼容性caniuse.com/namevalue-storage

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-11
        • 2020-07-25
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        • 2016-04-24
        相关资源
        最近更新 更多