PHP Cookie的使用教程详解


Posted in PHP onJune 03, 2013

1、设置Cookie
PHP用SetCookie函数来设置Cookie。必须注意的一点是:Cookie是HTTP协议头的一部分 ,用于浏览器和服务器之间传递信息,所以必须 在任何属于HTML文件本身的内容输出之前调用 Cookie函数。
SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下:

int SetCookie(string name, string value, int expire, string path, string domain, int secure);
除了name之外所有的参数都是可选的。value,path,domain三个参数可以用空字符串代换,表示没有设置;expire 和 secure两个参数是数值型的,可以用0表示。expire 参数是一个标准的Unix时间标记 ,可以用time()或mktime()函数取得,以秒为 单位。
secure 参数表示这个Cookie是否通过加密 的HTTPS 协议在网络上传输。

当前设置的Cookie不是立即生效的,而是要等到下一个页面时才能看到.这是由于在设置的这个页面里Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器的原因。
在同一个页面设置Cookie,实际是从后往前,所以如果要在插入一个新的Cookie之前删掉一个,你必须先写插入的语句,再写删除的语句,否则可能会出现不希望的结果。
来看几个例子:
简单的:
SetCookie("MyCookie", "Value of MyCookie");
带失效时间的:
SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时
什么都有的:
SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".phpuser.com", 1);

这里还有一点要说明的,比如你的站点有几个不同的目录,那么如果只用不带路径的Cookie的话,在一个目录下的页面里设的Cookie在另一 个目录的页面里是看不到的,也就是说,Cookie是面向路径的。实际上 ,即使没有指定路径,WEB服务器会自动传递当前的路径给浏览器的,指定路径会强 制服务器使用设置的路径。解决这个问题的办法是在调用SetCookie时加上路径和域名,域名的格式可以是“www.phpuser.com”,也可是 “. phpuser.com”。
SetCookie函数里表示value的部分,在传递时会自动被encode ,也就是说,如果 value的值是“test value”在传递时就变成了“test%20value”,跟URL的方法一样。当然,对于程序来说这是透明的,因为在PHP接收Cookie的值时会 自动将其decode。

如果要设置同名的多个Cookie ,要用数组,方法是:
SetCookie("CookieArray[]", "Value 1");
SetCookie("CookieArray[]", "Value 2");

SetCookie("CookieArray[0]", "Value 1");
SetCookie("CookieArray[1]", "Value 2");

2、接收和处理Cookie
PHP对Cookie的接收和处理的支持非常好,是完全自动的,跟FORM变量的原则一样,特别简单。
比如设置一个名为 MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个与普通变量一样的变量,名为$ myCookie,这个变量的值就是Cookie的值。数组同样适用。另外一个办法是引用PHP的全局变量$HTTP_COOKIE_VARS数组。
分别举例如下:(假设这些都在以前的页面里设置过了,并且仍然有效)
echo $MyCookie;
echo $CookieArray[0];
echo count($CookieArray);
echo $HTTP_COOKIE_VARS["MyCookie"];
就这么简单。

3、删除Cookie
要删除一个已经存在的Cookie,有两个办法:

一是调用只带有name参数 的SetCookie,那么名为这个name的Cookie将被从关系户机上删掉;
另一个办法是设置Cookie的失效时间为time()或time()-1 ,那么这个Cookie在这个页面的浏览完之后就被删除了(其实是失效了)。
要注意的是,当一个Cookie被删除时,它的值在当前页在仍然有效的。

4、使用Cookie的限制
首先是必须在HTML文件的内容输出之前设置;
其次不同的浏览器对Cookie的处理不一致辞,且有时会出现错误的结果。比如: MS IE+SERVICE PACK 1不能正确处理带域名和路径的Cookie,Netscape Communicator 4.05和MS IE 3.0不能正确处理不带路径和时间的Cookie。至于MS IE 5 好象不能处理带域名、路径和时间的Cookie。这是我在设计本站的页面时发现的。
第三个限制是在客户端的。

一个浏览器能 创建的Cookie数量最多为30个,并且每个 不能超过4KB ,每个WEB站点 能设置的Cookie总数不能超过20个 。

PHP 相关文章推荐
开源SNS系统-ThinkSNS
May 18 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
PHP addslashes()函数讲解
Feb 03 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 #PHP
深入PHP与浏览器缓存的分析
Jun 03 #PHP
PHP判断图片格式的七种方法小结
Jun 03 #PHP
基于session_unset与session_destroy的区别详解
Jun 03 #PHP
PHP批量采集下载美女图片的实现代码
Jun 03 #PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 #PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
Jun 03 #PHP
You might like
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
用PHP调用Oracle存储过程
2006/10/09 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
python进程与线程小结实例分析
2018/11/11 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
javascript实现密码验证
2015/11/10 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
详解Vue之事件处理
2020/07/10 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
用python实现的线程池实例代码
2018/01/06 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
python 实现线程之间的通信示例
2020/02/14 Python
详解python变量与数据类型
2020/08/25 Python
python开发入门——set的使用
2020/09/03 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
美国现代家具购物网站:LexMod
2019/01/09 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
教师辞职报告范文
2014/01/20 职场文书
道歉的话语大全
2015/05/12 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
新人入职感言
2015/07/31 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书