我有一个页面action.php
,我在其中通过代码运行SQL查询,因此无论何时查看页面,查询都会像一样运行,就像计算页面浏览量一样
<?php
mysqli_query("UPDATE ****");
?>
问题是当页面刷新时,查询运行&amp; PAGE REFRESH被视为我想避免的PAGE VIEW。
问题:如何避免?
我正在寻找的是一个简单的解决方案,以便我可以检查
if( page was refresh ) //some condition
{
do
}
答案 0 :(得分:26)
我找到了这个代码段here,它对我来说非常有效:
$pageWasRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($pageWasRefreshed ) {
//do something because page was refreshed;
} else {
//do nothing;
}
答案 1 :(得分:10)
您无法直接检测页面刷新,但您可以使用Cookie来模拟您想要的内容:
if (isset($_COOKIE['action'])) {
// action already done
} else {
setcookie('action');
// run query
}
根据您的要求,您还需要决定何时删除cookie和/或再次执行操作。
答案 2 :(得分:8)
检测页面刷新的最佳方法。或不?( Ctrl + F5 , F5 , Ctrl + R ,< kbd>输入)
$pageRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) &&($_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0' || $_SERVER['HTTP_CACHE_CONTROL'] == 'no-cache');
if($pageRefreshed == 1){
echo "Yes page Refreshed";
}else{
//enter code here
echo "No";
}
答案 3 :(得分:6)
如果您只想为用户运行一次,我会设置会话cookie,然后使用if()语句。
<?php
session_start();
if (!$_SESSION['loaded'])
{
// insert query here
}
$_SESSION['loaded'] = true;
?>
答案 4 :(得分:3)
//here you get the url behind the domain.
$currentPage = $_SERVER['REQUEST_URI'];
//if the session current page is not set.
if(!isset($_SESSION['currentPage'])){
//set the session to the current page.
$_SESSION['currentPage'] = $currentPage;
}
//check if the session is not equal to the current page
if($_SESSION['currentPage'] != $currentPage){
// if it's not equal you set the session again to the current page.
$_SESSION['currentPage'] = $currentPage;
//set the query you want to use
}
答案 5 :(得分:2)
我已经解决了这个问题......没有会话的HURRAHHH&amp;没有饼干
解决方案是PHP:AJAX:JavaScript
的组合要在Page Load&amp ;;上运行的查询不在页面刷新运行它作为通过AJAX调用让我说我的功能是
function runQUERY()
{
xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","doIT.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send();
}
我可以通过Javascript检查页面是新加载还是通过执行以下操作刷新
<head>
<script type="text/javascript">
function checkRefresh()
{
if( document.refreshForm.visited.value == "" )
{
// This is a fresh page load
alert ( 'Fresh Load' );
document.refreshForm.visited.value = "1";
..call you AJAX function here
}
else
{
// This is a page refresh
alert ( 'Page has been Refreshed, The AJAX call was not made');
}
}
</script>
</head>
<body onLoad="checkRefresh()">
<form name="refreshForm">
<input type="hidden" name="visited" value="" />
</form>
</body>
</html>
并在您的 doIT.php 中添加您要放在普通页面中的PHP代码
<?php
mysql_query("UPDATE---------");
//put any code here, i won't run on any page refresh
?>
答案 6 :(得分:2)
这可以在你的场景中使用:
if(isset($_GET["token"])) {
$view_token = $_GET["token"];
} else {
$new_views = $views + 1;
// UPDATE VIEWS
$view_token = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 5)), 0, 5);
header("Location: ?token=$view_token");
}
如果用户在URL中有令牌,则视图计数不会更新。因此,如果用户尝试刷新,则不会更新视图计数。当用户在URL中没有令牌时,视图计数会更新并使用令牌刷新页面。它在盒子外面思考但它有效!
答案 7 :(得分:1)
您可以保存将与当前页面关联的Cookie,如果单击任何链接,请使用新的页面名称更新Cookie。 假设上述操作是在 Javascript 中完成的,您可以将此updateCookie信息发送到服务器以通知新页面命中。
或者另一种方法是,您可以指定一个 HTTP HEADER ,指定页面上缓存过期的时间,这样浏览器甚至不会发送您有关页面加载/刷新的请求。
有关CACHING
的信息,请参阅http://www.mnot.net/cache_docs/#IMP-SCRIPT另外,请查看Etag vs HTTP中的过期 - ETag vs Header Expires
答案 8 :(得分:0)
if( $_SERVER['HTTP_CACHE_CONTROL'] == 'max-age=0')
{
$_SESSION['status'] = null;<br>
}