页面上的时间限制

时间:2013-05-08 18:42:52

标签: php sql time

我目前正在运营一个在线游戏网站,我试图阻止用户一遍又一遍地重新加载页面。我认为这样做的一个好方法是在URL中添加一个时间戳变量,如果用户按下Try Again,它将更新时间戳。

我试图将其设置为如果时间戳在5分钟内,那么脚本将允许它们访问,如果URL中的时间戳超出5分钟限制,脚本将死亡并产生错误。我搜索并找到了一些我已经实现的想法,但是我仍然可以在30分钟后使用相同的URL。我的网址结尾如下:ID是玩家ID号,t是unix时间戳

mug.php?ID=186&t=1368036608

这就是我在代码中所拥有的,以便尝试将其设置到位,我希望我对我想要做的事情已经足够清楚了。 URL中的时间戳在刷新时不会更新,它只是按下按钮的时间戳,所以我相信这是正确的。

include "globals.php";
$_GET['ID'] = isset($_GET['ID']) && is_numeric($_GET['ID']) ? abs(@intval($_GET['ID'])) : false;
$_GET['t'] = isset($_GET['t']) && is_numeric($_GET['t']) ? abs(@intval($_GET['t'])) : false;

$time = time();
$time2 = $_GET['t'];
$futuretime = $time2+(60*5);

if($futuretime < $time2)
{
print "Session Expired. Please go back to the profile page and press the mug button again. ";
die();
}

1 个答案:

答案 0 :(得分:2)

您应该在会话中保留时间戳,而不是在网址中,因为它可以轻松更改。 也许这样的事情会更好:

if (!session_id()) {
    session_start();
}

$currentTimestamp = $_SERVER['REQUEST_TIME'];
$allowTimeFrame = 300;
$nextTimestamp = $currentTimestamp + $allowTimeFrame;
$timestamp = isset($_SESSION['ac_timestamp']) ? $_SESSION['ac_timestamp'] : 0;

if ($currentTimestamp < $timestamp) {
   exit('Please do not refresh the page within ' . ($allowTimeFrame/60) .' minutes');
}

$_SESSION['ac_timestamp'] = $nextTimestamp;