码迷,mamicode.com
首页 > Web开发 > 详细

PHP使用cookie时遇到的坑

时间:2017-10-13 10:16:05      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:iss   string   tco   zed   字符   结果   参数   default   ima   

先看这么一段代码

<?php
date_default_timezone_set("Etc/GMT-8");
if(!isset($_COOKIE["visittime"])){	//如果Cookie不存在
 	setcookie("visittime",date("y-m-d H:i:s")); //设置一个Cookie变量
echo "first time to meet:".date("y-m-d H:i:s")."<br>";	//输出字符串
}else{	//如果Cookie存在
setcookie("visittime",date("y-m-d H:i:s"),time()+60); //设置带Cookie失效时间的变量
        echo "last time:".$_COOKIE["visittime"];	//输出上次访问网站的时间
	echo "<br>";	         //输出回车符
}
	echo "now: ".date("y-m-d H:i:s");	//输出当前的访问时间
?>

 

第一次运行该程序的结果如下图:

技术分享

 

然后我刷新了一次,运行结果如下图

技术分享

你如果不细心,一定没发现,第二次运行的last time的值,正是第一次运行时保存的值。

先看代码,如果$_COOKIE[‘visititme‘]没有赋值,就输出first meet 。。。和now

但是第二次运行的时候,$_COOKIE[‘visittime‘]已经被赋过值了,应该执行if(){   }  else {  }的else部分,也就是重新对visittime赋值,然后输出新赋的值和now,但是结果并没有和我预想的一样,重新对visittime赋值失败了,其依旧保存的是旧值,我翻手册,手册上是这样说的:

  • 为同一个参数再次设置 Cookie 前,必须先把它删掉。 如果参数的值是空 string 或 FALSE,并且其他参数和上次调用 setcookie 仍旧一样, 则指定的名称会被远程客户端删除。 内部的实现是:将值设置成 ‘deleted‘,并且过期时间是一年前。    

现在才知道为什么会这样了,真是一个坑。。。。。

PHP使用cookie时遇到的坑

标签:iss   string   tco   zed   字符   结果   参数   default   ima   

原文地址:http://www.cnblogs.com/-beyond/p/7658944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!