Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当用户离开特定页面时重置会话变量(刷新除外)_Javascript_Php_Jquery_Ajax_Session - Fatal编程技术网

Javascript 当用户离开特定页面时重置会话变量(刷新除外)

Javascript 当用户离开特定页面时重置会话变量(刷新除外),javascript,php,jquery,ajax,session,Javascript,Php,Jquery,Ajax,Session,首先,如果这是重复的,我很抱歉,我已经搜索过了,但到目前为止我什么也没找到 因此,当用户转到“fightzone1.php”时,它会发起一场随机战斗 $query=$db->prepare('SELECT * FROM monsters ORDER BY RAND() LIMIT 1'); 怪物的最大生命值在数据库中。但是,他的实际健康状况是这样计算的: $monster_actualhealth = ($data["monster_health"] - $_SESSION['dam

首先,如果这是重复的,我很抱歉,我已经搜索过了,但到目前为止我什么也没找到

因此,当用户转到“
fightzone1.php
”时,它会发起一场随机战斗

$query=$db->prepare('SELECT * FROM monsters ORDER BY RAND() LIMIT 1');
怪物的最大生命值在数据库中。但是,他的实际健康状况是这样计算的:

$monster_actualhealth = ($data["monster_health"] -   $_SESSION['damage']);
  • $Monster_实际健康是指怪物的健康

  • $data[“怪物健康状况”]是怪物的最大健康状况,位于数据库中

  • $\会话['damage']是用户将对怪物造成的伤害

通过此按钮,用户可以对怪物造成伤害

     if (isset($_POST['attacking'])) { 
        if (!isset($_SESSION['last_post'])) { 
     $_SESSION['last_post'] = 0;
  }
  $currtime = time(); 
  if ($currtime  > ($_SESSION['last_post'] + 2)) {
     $_SESSION['last_post'] = $currtime; 

      $randomdamageperso = rand(5, 12);
        $query->execute();
        $query->CloseCursor();
      $_SESSION['damage'] = ( $_SESSION['damage'] + $randomdamageperso);
     $monster_actualhealth = ($data["monster_health"] -   $_SESSION['damage']);
      echo "You inflicted " . $randomdamageperso . "  !";
           echo '<meta http-equiv="refresh" content="1.5" />';

}
}
}

要销毁特定会话名称,可以使用()

但是,在您的情况下,使用会话进行此操作是一个坏主意

你应该使用一个战斗表,保存用户id、怪物id、以()格式显示的开始时间和造成的伤害,当用户回来时,只需检查用户是否与该怪物开始战斗。当伤害达到0时,你删除战斗行或保留它作为历史记录

这样做的好处是,你还可以随着时间增加怪物的生命值,因此如果用户5分钟后回来,怪物可以治愈1或2点

创建会话不是为了在这样的活动环境中保存临时变量。它们用于存储非活动的变量,并在页面之间保存它们

因此,根据这一解释,您最好:

  • 创建战斗表{id,怪物id,玩家id,伤害,开始时间}
  • 保存对战斗桌造成的伤害
  • Obtional创建一个cron脚本,该脚本根据伤害等级小于怪物最大生命值的战斗开始时间减少怪物伤害
  • 当玩家回来后,通过检查玩家在离开前是否已经开始了与怪物的战斗来恢复与怪物的战斗
  • 只是一个想法,当用户不在时,怪物可能会有随机机会拿起新武器或盔甲,或施法,甚至进入愤怒状态,从而增加其攻击或防御。所以玩家在离开一场未完成的战斗之前可能会三思而后行,哈哈,如果怪物完全康复,他就会逃跑

    在任何情况下,表将提供比非常不稳定的会话更多的选项。(并不是说不可能开始工作)这并不是最有效的方法,因为会话会在某个时候失去所有数据。使用表格将为你的游戏打开新的可能性,比如战斗历史、战斗统计等等


    但是如果你真的想使用会话并坚持这个想法,你可以将伤害值绑定到怪物ID或事件ID,这样会话就不会破坏新事件/怪物战斗的开始

    $_SESSION[damage][555][12]
    $_SESSION[time_stamp][555][123456789]
    
    其中555是怪物id,12是总伤害,123456789是战斗开始的时间戳

    但我还是觉得这是个坏主意哈哈


    根据您在下面的评论,您只需进行简单检查

    // SQL examle    
    // SELECT * FROM fight WHERE player_id='$_SESSION[id]' and max_health<damage ORDER BY start_time desc limit 1
    
    if (isset($result->id)){
        echo "unfinished business!";
    }else{
        echo "starting a new battle!";
    }
    
    //SQL examle
    //选择*从战斗中,玩家(id=“$”会话[id]”和最大健康id){
    呼应“未竟事业!”;
    }否则{
    回声“开始一场新的战斗!”;
    }
    

    以上只是一个概念。您可以找到正确的实现方法。

    哇,这实际上是一个非常好的答案,谢谢!我想我现在需要你的帮助。因此,我创建了一个表“战斗怪物”,其中有战斗id、玩家id、怪物名称和怪物生命。问题是每次我刷新时,都会产生另一场战斗。我怎样才能使“如果发现一个玩家id与$会话['id']的id相同,那么”?如果用户已经在战斗中,我需要它不要随机挑选怪物。没问题。Juste在我的回答中添加了一个新的部分。这只是一个概念性的想法。但这会让你走上正轨。请接受答案;-)如果你还有其他问题,请告诉我。谢谢你的回答!对不起,我对MySQL非常不好,所以我还有一个问题。我试着按照你告诉我的去做(看看我在原始帖子中的编辑),但我不知道你从哪里得到了这么多美元的结果。。想弄清楚,没有线索。谢谢你帮助我;)$result将返回数据库查询。在您的情况下,它会像这样显示$result->id;你好我很抱歉所有的问题和时间,但我必须写代码。现在,一切都很好,有一个名为“fightm”的表,其中包含临时行和我需要的所有内容。唯一的问题是我仍然不知道主要问题的答案:我如何知道用户何时离开?我怎么知道用户没有离开战斗进行治疗,而是回来了?
    $_SESSION[damage][555][12]
    $_SESSION[time_stamp][555][123456789]
    
    // SQL examle    
    // SELECT * FROM fight WHERE player_id='$_SESSION[id]' and max_health<damage ORDER BY start_time desc limit 1
    
    if (isset($result->id)){
        echo "unfinished business!";
    }else{
        echo "starting a new battle!";
    }