我正在进行在线测验.
每次点击“下一个问题”按钮,我都尝试了以下方法:
if(isset($_POST['submit']) && isset($_POST['ans']))
{
//process answers and fetch next question
//Increment the Session variable which contains serial of next question
$_SESSION['qnum'] = $_SESSION['qnum']+1;
}
每当我点击F5按钮时,会话都会更新并提取新问题.
仅当单击下一个问题按钮时,会话才会递增,否则不应递增.
以下是我在参考文章后尝试过的内容:
$pageWasRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($pageWasRefreshed)
{
//refetch the current question.
}
else
{
//refetch the current question and increment the Session Variable
}
>这种方法在Mozilla Firefox中运行良好
>在IE中,按钮单击和F5命中都被视为未刷新
>在Chrome中,按钮单击和F5都将刷新
我已尝试过StackOverflow和Google上其他文章的其他变体,但这些变体根本不起作用,包括基于ajax的解决方案.
最佳答案 以下应该是您最好的解决方案:
$RSig = md5($_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'].print_r($_POST, true));
if(isset($_SESSION['LastRequest']) && $_SESSION['LastRequest'] == $RSig)
{
$_SESSION['reqstat']='refresh';
}
else
{
$_SESSION['qnum'] = $_SESSION['qnum']+1;
$_SESSION['reqstat']='newrequest';
$_SESSION['LastRequest'] = $RSig;
}
您可以使用Session:reqstat来检查应该在按钮单击时执行的操作,而不是刷新.