我使用php代码创建和更新SQL数据库,然后用它填充屏幕上的页面计数器(参见下面的代码片段)。如何将页面刷新与任何其他url更改区分开来,以避免每次刷新页面时都添加到我的计数器中?我希望在不将cookie放到用户桌面上的情况下执行此操作。提前感谢您的帮助。
include("incPHP1.inc");
$cxn=mysqli_connect($host,$user,$password,$database)
or die ("Couldn't connect to the server.");
$result = mysqli_query($cxn, "SELECT * FROM visitors");
$counter = mysqli_num_rows($result);
$views = $counter;Cosmin:
我将您编写的代码复制到php代码的第一行(参见下面的第一次尝试代码)。它在IE11和Firefox55.0.3中都不起作用。在这两种情况下,我都得到了一条错误消息(致命错误:在第2行的D:\InetPub\vhosts\rlcdev.com\httpdocs\index.php中,函数名必须是一个字符串),并且没有输出。我删除了初始的$session_name();命令行,并省略了它(参见下面的第二次尝试代码)。这是因为我知道$session_start();命令必须是
第一次尝试:
<?php
$session_name();
$session_start();
$_SESSION['refresh'] = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER
['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($_SESSION['refresh'])
{
echo ("<SCRIPT>alert ( 'Page has been refreshed, The AJAX call was not made');</SCRIPT>");
}
else
{
echo ("<SCRIPT>alert ( 'This is a non-refresh reload' );</SCRIPT>");
}第二次尝试:
<?php
$session_start();
$_SESSION['refresh'] = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER
['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($_SESSION['refresh'])
{
echo ("<SCRIPT>alert ( 'Page has been refreshed, The AJAX call was not made');</SCRIPT>");
}
else
{
echo ("<SCRIPT>alert ( 'This is a non-refresh reload' );</SCRIPT>");
}发布于 2017-09-04 20:36:34
使用cookies。
在本例中,使用您喜欢的名称和值(already_visited = 1)设置一个cookie,有效期为7年。然后你可以检查这个cookie是否是通过浏览器发送的。如果浏览器已经发送了cookie值,则它是一个刷新;否则,如果该cookie值不是由浏览器发送的,则它是第一次访问。
注意:此技术依赖于cookies,您只能跟踪浏览器是否接受cookies。如果浏览器中禁用了cookies,则无法检查此选项。
发布于 2017-09-04 23:23:41
下面是另一种方法:使用一个标志变量
$refresh = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
if($refresh)
{
echo ("<SCRIPT>alert ( 'Page has been refreshed, The AJAX call was not made');</SCRIPT>");
}
else
{
echo ("<SCRIPT>alert ( 'This is a non-refresh reload' );</SCRIPT>");
}发布于 2017-09-06 06:13:42
还是不管用,科斯敏。我决定走一条不同的路,使用SQL数据库、计时器和Ajax调用来确定调用是刷新还是新调用。这将有助于解决我正在尝试解决的其他一些问题。谢谢你的帮助。
https://stackoverflow.com/questions/46037006
复制相似问题