在PHP中设置、使用、删除Cookie的解决方法


Posted in PHP onMay 06, 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个。

关于Cookie的话题,就说到这儿了。

PHP 相关文章推荐
PHP nl2br函数 将换行字符转成 <br>
Aug 21 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
mac下安装nginx和php
Nov 04 PHP
php引用传值实例详解学习
Nov 06 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
May 10 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
php准确计算复活节日期的方法
Apr 18 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
基于PHP静态类的原罪详解
May 06 #PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 #PHP
PHPMailer邮件发送的实现代码
May 04 #PHP
用php实现选择排序的解决方法
May 04 #PHP
基于PHP 面向对象之成员方法详解
May 04 #PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 #PHP
PHP命名空间(Namespace)的使用详解
May 04 #PHP
You might like
提升PHP速度全攻略
2006/10/09 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
定义select的边框颜色
2008/04/28 Javascript
JS 实现双色表格实现代码
2009/11/24 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
python里对list中的整数求平均并排序
2014/09/12 Python
python实现在sqlite动态创建表的方法
2015/05/08 Python
python中的decorator的作用详解
2018/07/26 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
导游欢迎词范文
2015/01/23 职场文书