php阻止页面刷新时重新加载数据
我遇到的问题与防止表单数据重新发布的问题类似,但不完全相同。这个问题已经被回答了很多次。给出的建议,如标题重定向和会话,对我不起作用。我不知道他们失败的原因是我的错误实施,缺乏解决这个问题的经验,还是两者兼而有之 我有一个intranet web应用程序,它在启动时从不同的服务器提取数据,进行转换,然后将数据加载到应用程序本地的数据库中。如果用户刷新主页,ETL脚本将再次运行并复制数据 如何防止ETL脚本重新运行?对于此应用程序,没有理由刷新页面。如果可能的话,我是否应该完全阻止该页面上的刷新?我可能忽略了一些简单的事情。所以,我愿意接受建议 更新: 我在index.php页面上得到了这个测试代码。因此,我将在此基础上制定一个解决方案。我会通知你的php阻止页面刷新时重新加载数据,php,page-refresh,Php,Page Refresh,我遇到的问题与防止表单数据重新发布的问题类似,但不完全相同。这个问题已经被回答了很多次。给出的建议,如标题重定向和会话,对我不起作用。我不知道他们失败的原因是我的错误实施,缺乏解决这个问题的经验,还是两者兼而有之 我有一个intranet web应用程序,它在启动时从不同的服务器提取数据,进行转换,然后将数据加载到应用程序本地的数据库中。如果用户刷新主页,ETL脚本将再次运行并复制数据 如何防止ETL脚本重新运行?对于此应用程序,没有理由刷新页面。如果可能的话,我是否应该完全阻止该页面上的刷新?
session_start();
$_SESSION['views'] = 1; // store session data
echo "Pageviews = ". $_SESSION['views']; //retrieve data
调查。(免责声明,我是这篇文章的作者)我为您概述了一个非常基本的示例,说明如何使用会话确保每次访问(每个用户)只运行一次脚本。这里的关键点是,如果有1个以上的用户使用系统,脚本仍然会运行多次 为了解决这个问题,我只需要使用本地数据库来跟踪脚本上次运行的时间。因此,数据库中可以有一个datetime列,用于跟踪上次“运行”的执行时间
设置一个$\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...................................................
?>