图片 12

cookie使用办法与注意事项,为啥要刷新一下技术得到cookie

首先编写以下简单的代码:

首先编写以下简单的代码:

PHP cookie用法

复制代码 代码如下:

<?php 
    setcookie('a','value');
    print $_COOKIE['a'];

 代码如下

<?php
    setcookie(‘a’,’value’);
    print $_COOKIE[‘a’];

 

setcookie(‘mycookie’,’value’);
//函数原型:int setcookie(string name,string value,int expire,string
path,string domain,int secure)
echo($mycookie);
echo($HTTP_COOKIE_VARS[‘mycookie’]);
echo($_COOKIE[‘mycookie’]);

第一次访问时,报错:图片 1

第一次访问时,报错:

删除Cookie

报错的原因是$_COOKIE[‘a’]的值不存在。第二次访问:

图片 2

(1)调用只带有name参数的setcookie();
(2)使失效时间为time()或time-1;

图片 3

报错的原因是$_COOKIE[‘a’]的值不存在。

 代码如下

问:为什么第一次访问的时候,会没有cookie呢??我不是先设置,再获取吗??

 

<?php setcookie(‘name’); ?>

答:使用firefox的firebug查看”网络“:

第二次访问:

setcookie(‘mycookie’);或setcookie(‘mycookie’,”);或setcookie(“mycookie”,false);
//setcookie(‘mycookie’,”,time()-3600);
echo($HTTP_COOKIE_VARS[‘mycookie’]);
print_r($_COOKIE);

图片 4

图片 5

建议删除方法:

客户端:

 

 代码如下

可以看到,浏览器(客户端)向服务器发出一次请求,发出请求的时候,在请求头信息中带上了各种参数,告诉服务器,我要接收什么样的文本(Accept)、什么编码格式(Accept-Encoding)、什么语言(Accept-Language)等等,当然,还把Cookie也传到了服务器(Cookie)。

问:为什么第一次访问的时候,会没有cookie呢??我不是先设置,再获取吗??

setcookie(‘mycookie’,”,time()-3600);

服务器端:

答:使用firefox的firebug查看”网络“:

PHP提供一个很好用的函数mktime()。
你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,
mktime()就会返回该日期自1970年1月1日的总秒数。

第一步:setcookie(‘a’,’value’)

图片 6

因此,如果需要模拟 Y2K 问题:

因为cookie是设置在客户端的,setcookie函数自己并不能设置cookie,它只能通过头信息的方式告诉浏览器说:兄弟,我要设置一个cookie,键为a,值为value,你在你那里帮我设置一下。你也可以理解为:”来,朕今天高兴,赏你一个小甜饼“。

 

 代码如下

第二步:$_COOKIE[‘a’]$_COOKIE[‘a’]

客户端:

$y2k = mktime(0,0,0,1,1,2000);
setcookie(‘name’,’value’,$y2k);
setcookie(‘name’, ‘value’, time+3600);
setcookie(‘name’, ‘value’, $y2k, ‘~/myhome’, ‘.domain.com’);

很简单,执行的操作就是在浏览器带过来的cookie字符串中搜索键为a的cookie,并返回它的值。

可以看到,浏览器(客户端)向服务器发出一次请求,发出请求的时候,在请求头信息中带上了各种参数,告诉服务器,我要接收什么样的文本(Accept)、什么编码格式(Accept-Encoding)、什么语言(Accept-Language)等等,当然,还把Cookie也传到了服务器(Cookie)。

获取COOKIE过期时间的办法

图片 7

 

 代码如下

很明显,这个”键为a“的cookie不可能找到,因为客户端访问服务器的时候,这个cookie压根就不存在,而前面第一步设置cookie的头信息,也还没有返回给客户端(php要从上到下把语句执行完才会返回给客户端)

服务器端:

$expire = time() + 86400; // 设置24小时的有效期
setcookie (“var_name”, “var_value”, $expire); //
设置一个名字为var_name的cookie,并制定了有效期
setcookie (“var_name_expire”, $expire, $expire); //
再将过期时间设置进cookie以便你能够知道var_name的过期时间

第三步:服务器返回信息

第一步:setcookie(‘a’,’value’)

注:

其中,返回的头信息中带有”Set-Cookie
a=value“,浏览器收到这个头信息,把cookie存放到电脑的某个文件中,对于不同浏览器cookie的存放位置貌似不同,这个不在本文的范围。

因为cookie是设置在客户端的,setcookie函数自己并不能设置cookie,它只能通过头信息的方式告诉浏览器说:兄弟,我要设置一个cookie,键为a,值为value,你在你那里帮我设置一下。你也可以理解为:”来,朕今天高兴,赏你一个小甜饼“。

在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL
解码。
如果你不需要这样,可以使用 setrawcookie() 代替。

图片 8

 

PHP设置、获取与删除COOKIE

刷新浏览器,再次访问服务器的时候,同样,也会把很多头信息带给服务器,只不过这次带过去的cookie中,就多了一个a=value了。所心$_COOKIE[‘a’]自然就能从cookie字符串中找到这个键为a的cookie的值。

第二步:$_COOKIE[‘a’]

 

图片 9

$_COOKIE[‘a’]很简单,执行的操作就是在浏览器带过来的cookie字符串中搜索键为a的cookie,并返回它的值

 代码如下

您可能感兴趣的文章:

  • php cookie
    登录验证示例代码
  • PHP之COOKIE支持详解
  • PHP
    setcookie设置Cookie用法(及设置无效的问题)
  • php中cookie的使用方法
  • PHP会话控制:Session与Cookie详解
  • PHP读取CURL模拟登录时生成Cookie文件的方法
  • php利用cookies实现购物车的方法
  • php实现cookie加密的方法
  • PHP中COOKIES使用示例

 

//——–设置COOKIE,1小时后过期——//
setcookie(‘TestCookie’,’hello word
秦迷’,time()+3600);
//setrawcookie不进行URL编码
header(‘Content-type: text/html’);
 

图片 10

//查看发送的报头
var_dump(headers_list());#array(2) { [0]=> string(85)
“Set-Cookie: TestCookie=hello+word+%C7%D8%C3%D4; expires=Tue,
19-Apr-2011 10:06:14 GMT” [1]=> string(23) “Content-type:
text/html” }
echo ‘<br>’;
echo $_COOKIE[‘TestCookie’];#hello word 秦迷
//兼容旧版本(淘汰)
if(isset($HTTP_COOKIE_VARS[“TestCookie”])){
    echo $HTTP_COOKIE_VARS[“TestCookie”];
}
 

 

echo ‘<br>’;
//输出所有 cookie
print_r($_COOKIE);#Array ( [key] => value [TestCookie] =>
hello word 秦迷 )
?>
 

很明显,这个”键为a“的cookie不可能找到,因为客户端访问服务器的时候,这个cookie压根就不存在,而前面第一步设置cookie的头信息,也还没有返回给客户端(php要从上到下把语句执行完才会返回给客户端)

<script
type=”text/javascript”>
<!–
alert(document.cookie);
//–>
</script>
 

 

 

第三步:服务器返回信息

<?php
//—–设置数组COOKIE——-//
setcookie(“cookie[one]”,”oneVal”,time()+3600);
setcookie(“cookie[two]”,”twoVal”,time()+3600);
 

其中,返回的头信息中带有”Set-Cookie
a=value“,浏览器收到这个头信息,把cookie存放到电脑的某个文件中,对于不同浏览器cookie的存放位置貌似不同,这个不在本文的范围。

echo ‘<br>’;
echo $_COOKIE[‘cookie’][‘two’];#twoVal
echo ‘<br>’;
 

图片 11

//输出 cookie (在重载页面后)
if (isset($_COOKIE[“cookie”]))
{
    foreach
($_COOKIE[“cookie”] as $name => $value)
    {
       echo “$name : $value <br>”;
       /**
        * two : twoVal
        * one : oneVal
        */
 

 

    }
}
 

刷新浏览器,再次访问服务器的时候,同样,也会把很多头信息带给服务器,只不过这次带过去的cookie中,就多了一个a=value了。所心$_COOKIE[‘a’]自然就能从cookie字符串中找到这个键为a的cookie的值。

 

图片 12

//设置过期,删除COOKIE
//setcookie(‘TestCookie’, ”, time() – 3600);
//setcookie(‘cookie[one]’, ”, time() – 3600);

 

方法一:

来自为知笔记(Wiz)

在PHP里Cookie的使用是有一些限制的。
1、使用setcookie必须在<html>标签之前
2、使用setcookie之前,不可以使用echo输入内容
3、直到网页被加载完后,cookie才会出现
4、setcookie必须放到任何资料输出浏览器前,才送出

由于上面的限制,在使用setcookie()函数时,学会遇到 “Undefined
index”、”Cannot modify header information – headers already sent
by”…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数
ob_start();

ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

方法二:

解决Warning: Cannot modify header information – headers already sent by
……

前几天装了个php的大头贴系统测试,发现报错Warning: Cannot modify header
information – headers already sent by
….今天又装openads,还是出现这个问题。怒了。上网找了半天,有人说要在文件开头写上ob_start();,结果失败。后来打开
php.ini 然后把 output_buffering 设为 on
。重起appache,OK。看来这才是解决办法。

特别注意:如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉bom,可以用Notepad++打开转换一下。切记,切记,切记!(这问题害我折腾了半天。)

方法三:

当前设置的Cookie
不是立即生效的,而是要等到下一个页面时才能看到.这是由于在设置的这个页面里
Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器的原
因。在同一个页面设置Cookie,实际是从后往前,所以如果要在插入一个新的Cookie之前删掉一个,你必须
先写插入的语句,再写删除的语句,否则可能会出现不希望的结果。

删除一个COOKIE时,该COOKIE的值在当前页面仍然是有效的,也就是值还是存在的,在下次请求该页面或其它页面时就不会存在了。也就是说PHP的COOKIE相关操作都是异步的,当前面设置或删除了COOKIE,要等到下次请求时才能正确反应出来。

删除COOKIE时最好不要用setcookie(cookie名)这种方法,这样很容易删除整个COOKIE数组,具体我不细说了,注意就行了,删除COOKIE的最好方法是设有效时间为过去,当浏览器发现COOKIE有效期过后会确发删除COOKIE事件,还有一点要注意的时,设置COOKIE时有几个参数,删除时也要有几个参数,否则容易出错。