php阻止页面刷新时重新加载数据

php阻止页面刷新时重新加载数据,php,page-refresh,Php,Page Refresh,我遇到的问题与防止表单数据重新发布的问题类似,但不完全相同。这个问题已经被回答了很多次。给出的建议,如标题重定向和会话,对我不起作用。我不知道他们失败的原因是我的错误实施,缺乏解决这个问题的经验,还是两者兼而有之 我有一个intranet web应用程序,它在启动时从不同的服务器提取数据,进行转换,然后将数据加载到应用程序本地的数据库中。如果用户刷新主页,ETL脚本将再次运行并复制数据 如何防止ETL脚本重新运行?对于此应用程序,没有理由刷新页面。如果可能的话,我是否应该完全阻止该页面上的刷新?

我遇到的问题与防止表单数据重新发布的问题类似,但不完全相同。这个问题已经被回答了很多次。给出的建议,如标题重定向和会话,对我不起作用。我不知道他们失败的原因是我的错误实施,缺乏解决这个问题的经验,还是两者兼而有之

我有一个intranet web应用程序,它在启动时从不同的服务器提取数据,进行转换,然后将数据加载到应用程序本地的数据库中。如果用户刷新主页,ETL脚本将再次运行并复制数据

如何防止ETL脚本重新运行?对于此应用程序,没有理由刷新页面。如果可能的话,我是否应该完全阻止该页面上的刷新?我可能忽略了一些简单的事情。所以,我愿意接受建议

更新:

我在index.php页面上得到了这个测试代码。因此,我将在此基础上制定一个解决方案。我会通知你的

session_start();
$_SESSION['views'] = 1; // store session data
echo "Pageviews = ". $_SESSION['views']; //retrieve data

调查。(免责声明,我是这篇文章的作者)

我为您概述了一个非常基本的示例,说明如何使用会话确保每次访问(每个用户)只运行一次脚本。这里的关键点是,如果有1个以上的用户使用系统,脚本仍然会运行多次

为了解决这个问题,我只需要使用本地数据库来跟踪脚本上次运行的时间。因此,数据库中可以有一个datetime列,用于跟踪上次“运行”的执行时间

  • 因此,在PHP代码中(代替检查$\u会话),您将查询db以检索datetime值
  • 有了最后一次运行日期/时间后,您将检查当前日期/时间是否超过允许的“更新时间”(例如24小时)
  • 如果时间超过了分配的“更新时间”,那么代码将运行25小时,您将把datetime更新为now()
  • 如果时间在分配的时间内,则不会发生任何事情,也不会更新数据库,脚本也不会运行
  • 重复3-4次
  • 上述方法将使用户数量变得无关紧要,因为所有检查都将针对中心数据集(即您的数据库)执行。它也可能会更加健壮,因为它将独立于浏览器和用户

    无论如何,这里有一个会话(每个用户)方法:


    设置一个$\u会话如何,这样当用户登录时,代码将运行,会话将被设置。然后,应用程序将检查会话是否已设置(在用户退出程序之前,假设您更改了session.gc_maxlife等设置以适应该设置)=在用户下次登录之前,不再运行代码。如果你想要一个例子,请告诉我。谢谢你的回复。正如我上面提到的,我在实现会话时遇到了困难,可能是因为我缺乏使用会话的经验。我无法让它们正常工作。我对它的设置一无所知。让我知道如何正确地实现它们,我会再试一次。感谢您的详细回复。我将看看如何将其整合到我的代码中。我根据@Steve的建议得出了一个解决方案,部分来自#php IRC频道的人员。它涉及将会话变量设置为时间戳并对其进行测试。不需要调用数据库。这里有一个代码链接供你参考嗨,迈克,我很高兴你最后把它整理好了。与依赖实际的Session.gc_maxlife设置相比,Session-to-timestamp可能是一个更健壮的解决方案,所以这是一个很好的补充。然而,值得注意的是,即使使用时间戳代码,如果您有多个用户(使用不同的浏览器),代码仍将运行一次以上(但如果您对此没有问题,则不会出现问题)。目前,我并不设想每天有多个用户。如果情况有所改变,我可以重新讨论这个问题。谢谢
    
    <?php
    /* 
     * Set PHP sessions to suit:
     * 
     * session.gc_maxlifetime is the number of seconds after which the data 
     * will be seen as garbage and cleaned up (session life) - 
     * 
     * Set to 86400 to in theory make the session last 24 hours - adjust this 
     * number to suit.
     * 
     * If this doesn't work you may have to try and adjust the php session lifetime
     * in either the php.ini file directly or htaccess file.
     * 
     */
    ini_set('session.gc_maxlifetime',86400);
    /* 
     * not strictly neccessary as this is default setting (but just to make sure)
     * This will keep the cookie alive (the link to your session) until the user
     * closes their browser. 
     * 
     * You could set it to > 86400 if you want that extra bit of certainity that 
     * the session will get renewed @ 24 hrs / the time you wanted to.
     */ 
    ini_set('session.cookie_lifetime',0);
    // Start PHP session
    session_start(); 
    
    // Check if the session is empty / exists (which it will be on first page entry)
    if ( empty($_SESSION['hasVisited']) ) {
    
      /* 
       * Add your ETL script logic here:
       * 
       * This will only run on the first visit to the site
       */   
    }
    
    // Now set the session as the scripts have run once
    $_SESSION['hasVisited'] = true;
    
    // Continue on with your app...................................................
    
    ?>