首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP页面刷新问题

PHP页面刷新问题
EN

Stack Overflow用户
提问于 2016-12-02 12:02:31
回答 3查看 226关注 0票数 4

我正在做一个在线测试。

在“下一个问题”按钮的每一次点击中,我都尝试了以下几点:

代码语言:javascript
复制
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按钮时,就会更新会话并获取一个新的问题。

只有在单击“下一个问题”按钮时,会话才会增加,否则不应该增加。

以下是我在提到一篇文章之后所做的尝试:

代码语言:javascript
复制
$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和谷歌文章的变体,但这些版本在上都没有用,包括基于ajax的解决方案

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-02 12:31:42

以下是您的最佳解决方案:

代码语言:javascript
复制
$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;
    }

您可以使用会话: reqstat来检查应该在按钮单击而不是刷新时执行的操作。

票数 1
EN

Stack Overflow用户

发布于 2016-12-02 12:13:16

您不应该显示带有POST请求的页面。

您所做的是处理POST数据,然后使用php刷新页面。

如下所示:

代码语言:javascript
复制
<?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> ...';
?>

注意:如果使用标头(“位置:.”)没有任何东西必须打印/回响,即使是空格/新行/.

因此,.php文件的第一个字符必须是"<“(开始的php标记的字符)。

票数 1
EN

Stack Overflow用户

发布于 2016-12-02 12:13:34

也许不是完美的解决方案,但会奏效

代码语言:javascript
复制
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'];
  }

}

如果您想防止计算所有页面,只需使用arraysarray_search

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40931785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档