我正在进行在线测验 每次点击“下一个问题”按钮,我都尝试了以下内容:
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
}
我在StackOverflow和Google的其他文章中尝试了其他一些变体,但这些变体根本不起作用包括基于ajax的解决方案。
答案 0 :(得分:1)
您永远不应该显示POST请求的页面。
你做的是处理POST数据,然后用php刷新页面。
像这样:
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST') {
//handle the POST data
...
// now refresh
header('location: index.php'); // or what ever url you were on
exit();
}
// else: show the page
echo '<html> ...';
?>
注意:如果您使用标题(&#39;位置:...&#39;)必须打印/回显NOTHING,甚至不是空格/新行/ ...
因此.php文件的第一个字符必须是&#34;&lt;&#34; (开放的php标签)
答案 1 :(得分:1)
以下应该是您最好的解决方案:
$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来检查应该在按钮点击时执行的操作,而不是刷新。
答案 2 :(得分:0)
可能不是完美的解决方案,但会起作用
if(isset($_POST['submit']) && isset($_POST['ans']))
{
//I am assuming we have question id or any uniq data about question
if($_SESSION['last_que'] != $_POST['que_id']){
$_SESSION['qnum'] = $_SESSION['qnum']+1;
$_SESSION['last_que'] = $_POST['que_id'];
}
}
如果您想阻止对所有网页进行统计,请使用arrays
和array_search