1

我编写了一个 PHP 脚本,它从网站获取有关访问者 IP 和浏览器的信息,并将其存储在我的数据库中的表中。这个脚本包含在标题中,每次加载每个页面时都会运行,谷歌分析类型的东西。调查.php

我希望这个代码只为网站的每个新访问者运行,所以我只记录每个新访问者。

我想这是通过设置 cookie 来完成的,所以我编写了其他代码来设置 cookie,然后仅在没有 cookie 时才包含survey.php 。我用过isset中的函数运行 if 语句,如果它不存在但它没有设置 cookie 并且在每次加载时运行脚本。

根据手册中的内容,我看不出哪里出错了。

<?php 
if(!isset($_COOKIE['Name'])){
    setcookie("Name");
    include ('survey.php');
}
?>

编辑:我添加了一个值,用多个用户对其进行了测试,并且脚本仍然运行每个负载。不知道为什么。

4

4 回答 4

2

给你的cookie一个值:

$value = 'something from somewhere';

if(!isset($_COOKIE['Name'])){
  setcookie("Name", $value);
  include ('survey.php');
}

鉴于它是为了识别新用户,使用“0”或“1”就足够了。

如果您希望 cookie 在将来过期:

setcookie("Name", $value, time()+604800);  /* expires in a week */

编辑:

我已经在一个简单的页面中使用以下代码进行了尝试:

<?php 
  if(!isset($_COOKIE['Test'])){

    setcookie("Test", '1');
    echo "Cookie set";
    //include ('survey.php');
  }
?>

我得到“Cookie set”一次,然后在随后的刷新中不再看到它。我还可以在控制台中看到 cookie:

Test | 1 | www.domain.com | / | Session | 5

唯一的潜在问题(因为您使用不同的用户)是此 cookie 是为当前会话设置的,因此将其设置为在未来很长一段时间内过期将有利于永久性,并且会阻止您的用户很快看到您的调查:

<?php 
  if(!isset($_COOKIE['Test'])){

    //Expires on 31 december 2015
    setcookie("Name","1",mktime (0, 0, 0, 12, 31, 2015));
    include ('survey.php');
  }
?>
于 2013-03-29T12:47:43.437 回答
1

1) 尝试像这样为 cookie 设置值 $value = 'Test'; setcookie("TestCookie", $value);

2) 检查浏览器是否启用cookies

于 2013-03-29T12:49:34.970 回答
1

为了设置 cookie,或者更确切地说,为了从 PHP 中获取发送给用户的 cookie,您需要给它一个值。浏览器(至少是大多数现代浏览器)将一个空的 cookie 标头作为命令来清除它们拥有的具有该名称的任何 cookie。

因此,显然,它不会在进一步的请求中发送,因为浏览器没有将其设置为 null,而是丢弃了它。

给它一个随机的短值,你所有的问题都会消失:

setcookie("Name",rand(1,10));

或类似的。

于 2013-03-29T12:51:53.317 回答
1

解决

我将代码作为第一段代码包含在内,但不在第一行。

设置 cookie 的代码必须在第 1 行开始。

发布此内容以便其他人可以受益。

于 2013-03-30T11:09:16.193 回答