php专区

 首页 > php专区 > 正则表达式 > PHP cookie使用方法与注意事项 - php会话

PHP cookie使用方法与注意事项 - php会话

分享到:
【字体:
导读:
          cookie是一个用于存储信息到客户端浏览器中的我们可以利用cookie来记录用户的一些相关信息,像站长统计代码就基于cookie与ip来实现的,下面我来介绍cookie使用与注意事项 PHP cookie用法,代码...

PHP cookie使用方法与注意事项

cookie是一个用于存储信息到客户端浏览器中的我们可以利用cookie来记录用户的一些相关信息,像站长统计代码就基于cookie与ip来实现的,下面我来介绍cookie使用与注意事项.

PHP cookie用法,代码如下:

  1. setcookie('mycookie','value'); 
  2. //函数原型:int setcookie(string name,string value,int expire,string path,string domain,int secure) 
  3. echo($mycookie); 
  4. echo($HTTP_COOKIE_VARS['mycookie']); 
  5. echo($_COOKIE['mycookie']); 

删除Cookie

(1)调用只带有name参数的setcookie();

(2)使失效时间为time()或time-1;

代码如下:

  1. 'name'); ?> 
  2. setcookie('mycookie');或setcookie('mycookie','');或setcookie("mycookie",false); 
  3. //setcookie('mycookie','',time()-3600); 
  4. echo($HTTP_COOKIE_VARS['mycookie']); 
  5. print_r($_COOKIE); 

建议删除方法,代码如下:setcookie('mycookie','',time()-3600);

PHP提供一个很好用的函数mktime().

你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,mktime()就会返回该日期自1970年1月1日的总秒数,因此,如果需要模拟 Y2K 问题,代码如下:

  1. $y2k = mktime(0,0,0,1,1,2000); 
  2. setcookie('name','value',$y2k); 
  3. setcookie('name''value', time+3600); 
  4. setcookie('name''value'$y2k'~/myhome''.domain.com'); 

获取COOKIE过期时间的办法,代码如下:

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

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

PHP设置、获取与删除COOKIE,代码如下:

  1. //--------设置COOKIE,1小时后过期------// 
  2. setcookie('TestCookie','hello word 秦迷',time()+3600); 
  3. //setrawcookie不进行URL编码 
  4. header('Content-type: text/html'); 
  5. //查看发送的报头 
  6. 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" } 
  7. echo '
    '
  8. echo $_COOKIE['TestCookie'];#hello word 秦迷 
  9. //兼容旧版本(淘汰) 
  10. if(isset($HTTP_COOKIE_VARS["TestCookie"])){ 
  11.     echo $HTTP_COOKIE_VARS["TestCookie"]; 
  12. echo '
    '
  13. //输出所有 cookie 
  14. print_r($_COOKIE);#Array ( [key] => value [TestCookie] => hello word 秦迷 ) 
  15. ?> 
  16. "text/javascript"
  17.  
  18.  
  19. //-----设置数组COOKIE-------// 
  20. setcookie("cookie[one]","oneVal",time()+3600); 
  21. setcookie("cookie[two]","twoVal",time()+3600); 
  22. echo '
    '
  23. echo $_COOKIE['cookie']['two'];#twoVal 
  24. echo '
    '
  25. //输出 cookie (在重载页面后) 
  26. if (isset($_COOKIE["cookie"])) 
  27.     foreach ($_COOKIE["cookie"as $name => $value
  28.     { 
  29.        echo "$name : $value 
    "
  30.        /** 
  31.         * two : twoVal 
  32.         * one : oneVal 
  33.         */ 
  34.     } 
  35. //设置过期,删除COOKIE 
  36. //setcookie('TestCookie', '', time() - 3600); 
  37. //setcookie('cookie[one]', '', time() - 3600); 

方法一:

在PHP里Cookie的使用是有一些限制的。

1、使用setcookie必须在标签之前

2、使用setcookie之前,不可以使用echo输入内容

3、直到网页被加载完后,cookie才会出现

4、setcookie必须放到任何资料输出浏览器前,才送出

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

ob_start:打开输出缓冲区

函数格式Lvoid 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时有几个参数,删除时也要有几个参数,否则容易出错.

分享到:
PHP Session 变量用法详解与实例教程 - p...
PHP Session 变量用法详解与实例教程 当您运行一个应用程序时,您会打开它,做些更改,然后关闭它,这很像一次会话,计算机清楚你是谁,它知道你何时启动应用程序,并在何时终止,但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态. 通过在服务器上存储...
php cookie清除与ff下cookie无法删除 - p...
php cookie清除与ff下cookie无法删除 首先我们看一下php手册中关于删除cookie的说明: bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] ) 要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制,下面的例...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……