两分钟后变量未设置

时间:2015-04-09 17:34:39

标签: php html

嘿伙计们正在写一个小的验证脚本,它使用一个简单的令牌从输入登录。当令牌是正确的时,用户必须成功登录,两分钟后令牌必须到期并给用户一个消息令牌已过期。但是在这里,当我使用令牌时,它还带有消息令牌被破坏..我想使用令牌2分钟,我希望令牌在2分钟内过期。

我有html文件

<form action="gethints.php" method="post">
  First name: <input type="text" name="fname"><br>
  <input type="submit" value="Submit">
</form>

Php文件

<?php
$name = $_POST['fname'];
$currenttime = time();
$token = 'sample';
$timetounset = strtotime("2 minutes");
if($name != $token) {
echo 'you cant login';
} else {
echo 'you have succesfully logged in <br>';
}

if($currenttime > time() - $timetounset) {
unset($token);
echo "you cant use this token anymore";
} else {
echo 'token is not destroyed';
}

当我运行此代码并在输入框中键入sample时,我会收到类似

的消息

you have succesfully logged in you cant use this token anymore

我需要的是当我输入id作为样本我希望得到消息you have succesfully logged in时两分钟后我使用相同的id我需要得到像you cant use this token anymore

感谢您的帮助..

3 个答案:

答案 0 :(得分:0)

接近此imo的最简单方法是设置一个2分钟到期的cookie。

在cookie中存储变量或标志,并在每次要进行验证时检查内容。

setcookie("TestCookie", $value, time()+120);

读出值:

if (isset($_COOKIE['TestCookie'])) {
  // Good cookie
} else { 
  // expired or invalid 
}

有关如何设置cookie和过期的信息:

http://php.net/manual/en/function.setcookie.php

答案 1 :(得分:0)

可以在这里使用会话:

首先,存储用户上次发出请求的时间

<?php
$_SESSION['timeout'] = time();
?>

在后续请求中,检查他们提前多久提出请求

<?php
if ($_SESSION['timeout'] + 2 * 60 < time()) {
   // session timed out
} else {
   // session ok
}
?>

编辑: 不要忘记拥有session_start();在您的代码和&amp;&amp;检查$ _SESSION ['timeout']是否存在,上面的代码只是一个例子。

答案 2 :(得分:0)

人们可以玩饼干。我建议你用token和expires列创建一个数据库表标记。插入令牌时,将此添加到您的sql中。 ......插入....... Timestampadd(now(),interval minute 2);要验证只检查now()是否小于到期。