Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在PHP中设置Cookie_Php_Cookies_Ip_Setcookie - Fatal编程技术网

无法在PHP中设置Cookie

无法在PHP中设置Cookie,php,cookies,ip,setcookie,Php,Cookies,Ip,Setcookie,我已经编写了一个PHP脚本,它从一个网站获取关于访问者IP和浏览器的信息,并将其存储在数据库的一个表中。这个脚本包含在标题中,每次加载页面时都会运行,google analytics类型的东西。survey.php 我希望此代码只为网站的每个新访问者运行,以便我只记录每个新访问者 我想这是通过设置cookie来实现的,所以我编写了其他代码来设置cookie,然后仅在没有cookie的情况下才包括survey.php。 我已经用过了!函数在isset中运行if语句,如果它不存在,但它没有设置coo

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

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

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

根据书中的内容,我看不出我错在哪里

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

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

给你的饼干一个值:

$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是为当前会话设置的,因此将其设置为在将来很长一段时间内过期将有利于持久性,并将防止您的用户在短期内看到您的调查:

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

    //Expires on 31 december 2015
    setcookie("Name","1",mktime (0, 0, 0, 12, 31, 2015));
    include ('survey.php');
  }
?>

给你的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是为当前会话设置的,因此将其设置为在将来很长一段时间内过期将有利于持久性,并将防止您的用户在短期内看到您的调查:

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

    //Expires on 31 december 2015
    setcookie("Name","1",mktime (0, 0, 0, 12, 31, 2015));
    include ('survey.php');
  }
?>

1尝试像这样为cookie设置值 $value='Test'; setcookieTestCookie,$value


2检查浏览器中是否启用了cookie

1尝试这样设置cookie的值 $value='Test'; setcookieTestCookie,$value


2检查浏览器中是否启用cookie要设置cookie,或者更确切地说,要从PHP将cookie发送给用户,您需要给它一个值。浏览器——至少在大多数现代浏览器中——以空的cookie头作为清除cookie的命令

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

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

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

或者类似。

为了设置cookie,或者更确切地说,为了从PHP将cookie发送给用户,您需要给它一个值。浏览器——至少在大多数现代浏览器中——以空的cookie头作为清除cookie的命令

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

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

setcookie("Name",rand(1,10));
或类似问题。

已解决

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

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

发布此消息以便其他人可以受益

已解决

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

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



发布此消息以便其他人可以受益

您是否已尝试使用值设置cookie?否,这是页面中唯一的一次。除非你的意思是给cookie添加一个值,否则不是。我应该添加一个值吗?setcookieName,somevalue;它必须有一个值?好的,我试试看,你可能想检查的另一件事是,在设置cookie之前,没有输出任何内容。它们是在标题中设置的,并且在大多数设置中,输出不是缓冲的。您是否已尝试使用值设置cookie?不,这是页面中唯一的一次。除非你的意思是给cookie添加一个值,否则不是。我应该添加一个值吗?setcookieName,somevalue;它必须有一个值?好的,我试试看,你可能想检查的另一件事是,在设置cookie之前,没有输出任何内容。它们是在标题中设置的,在大多数设置中,输出不是缓冲区。我想这就是答案,因为它不再记录我的刷新。我只需要检查它是否对每个人都执行相同的操作。通过这种方式,对几个不同的用户进行了测量,并且每次都记录。没办法解决@AdamBrown编辑了我的答案,这可能会有所帮助。谢谢编辑。我这样试过,但没有用。它每次都在回响,而不是在控制台中设置。真的很困惑。Safari、Chrome和Firefox都接受cookie。谢谢你的尝试,我想这是答案,因为它不再记录我的刷新了,我只需要检查它是否对每个人都做了相同的事情,用这种方式对几个不同的用户进行了测量,并且它仍然在记录eac
是时候了。没办法解决@AdamBrown编辑了我的答案,这可能会有所帮助。谢谢编辑。我这样试过,但没有用。它每次都在回响,而不是在控制台中设置。真的很困惑。Safari、Chrome和Firefox都接受cookie。谢谢你尝试嗨Adam Borrown,我试过你的代码,效果很好。请确认你的浏览器设置Shi Adam Borwn,我试过你的代码,效果很好。请确认您的浏览器设置