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 相关文章推荐
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
php存储过程调用实例代码
Feb 03 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
php四种基础算法代码实例
Oct 29 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 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
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
python字符串中的单双引
2017/02/16 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
django使用JWT保存用户登录信息
2020/04/22 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
产品质量承诺书
2014/03/27 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
文明礼貌主题班会
2015/08/14 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android