0

我正在使用 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;

科斯敏:

我复制了您将其写入我的 php 代码的第一行的代码(请参阅下面的第一次尝试代码)。它在 IE11 或 Firefox 55.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>");
}
4

3 回答 3

0

使用 cookie。

在您的情况下,使用您喜欢的名称和您喜欢的值(already_visited = 1)设置一个具有终身有效期(7 年)的 cookie。然后你可以检查这个cookie是否是由浏览器发送的。如果浏览器已发送 cookie 值,则刷新;否则,如果浏览器未发送 cookie 值,则为第一次访问。

注意:此技术依赖于 cookie,您只能跟踪 cookie 是否在浏览器中被接受。如果在浏览器中禁用了 cookie,则没有选项可以检查这一点。

于 2017-09-04T12:36:34.163 回答
0

这是另一种方法:使用标志变量

$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-04T15:23:40.873 回答
0

还是没用,科斯敏。我决定采用不同的方式,使用 SQL 数据库、计时器和 Ajax 调用来确定调用是刷新还是新调用。这将有助于解决我试图解决的其他一些问题。感谢所有的帮助。

于 2017-09-05T22:13:42.350 回答