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,这样会话就不会破坏新事件/怪物战斗的开始
$_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!";
}