javascript – PHP页面刷新问题

我正在进行在线测验.

每次点击“下一个问题”按钮,我都尝试了以下方法:

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来检查应该在按钮单击时执行的操作,而不是刷新.

点赞