PHP中的cookie


Posted in PHP onNovember 26, 2006

用PHP来设置并读取cookie是一件极其——我们敢说吗?——简单的事情。我们并不希望大力鼓吹cookie,不过它们的确既重要又实用。它们是解决某些问题时唯一适用的工具。

要创建并修改一个 cookie,可使用PHP函数setcookie()。取决于想对cookie进行控制的程度,及谁可以读取cookie的值,setcookie()最多可有六个参数。

设置cookie最简单的方式如下:

<?php
setcookie
('name', 'bret'
);
?>

然后,在用户退出前,接下来使用此浏览器查看的站点中每一个页面,都会有一个值为“bret”的变量$name,并且很容易通过PHP 对其进行访问。由于其生存期是一次用户连结,此类cookie被称为session cookie。

如果希望用户关闭其浏览器后,仍保留此cookie,则必须传递第三个参数给setcookie()函数,即设定此cookie的有效日期。由于PHP的背景完全源于Unix的思想,这个有效期限需要以从1970年1月1日起算的总秒数来代表。如果作为Unix程序员,这种算法对你而言可能是合情合理的。但如果来自Windows或Macintosh阵营,你可能只能摇头叹息,无法理解那些古怪的Unix家伙们。

不过无需害怕。PHP提供一个很好用的函数mktime()。你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,mktime()就会返回该日期自1970年1月1日的总秒数。因此,如果需要模拟 Y2K 问题:

<?php
$y2k
= mktime(0,0,0,1,1,2000
);
setcookie('name', 'bret', $y2k
);
?>

现在,你的cookie将会在2000年失效。

如果需要更新cookie以让其储存新值,只需要将其原值覆盖即可。因此,即使你已经在之前的页面中刚刚发送cookie,仍可以将你的名字改为“jeff”。

<?php
$y2k
= mktime(0,0,0,1,1,2000
);
setcookie('name', 'jeff', $y2k
);
?>

注意这样做并不会改变变量$name的值。在页面载入的时候,其值就已经确定。如果希望总是同时确定二者,可以编写如下代码:

<?php
$name
= 'jeff'
;
$y2k = mktime(0,0,0,1,1,2000
);
setcookie('name', $name, $y2k
);
?>

setcookie()的下两个参数可以控制读取cookie的程序的域及目录路径。默认设定为仅在与送出cookie的服务器相同且在同级或以下的目录结构内的页面才可以读取其值。这是出于网络安全方面的考虑。然而,如果你有一个帐号“www.domain.com”但同时也是“other.domain.com”,且帐户允许从~/myhome目录处理页面,则应更改setcookie()如下:

<?php
setcookie
('name', 'jeff', $y2k, '~/myhome', '.domain.com'
);
?>

我们还未使用过的setcookie()最后一个参数是设定cookie只传送给实行诸如SSL的安全连接的Web服务器。要使用此功能,将第六个值设置为1。

删除cookie非常简单,仅需简单地将cookie的名传送给setcookie(),PHP就会将其删除掉。

<?php
setcookie
('name'
);
?>

最后还有一个关于使用cookie的重要事项。由于cookie与HTTP的特定工作方式,你必须在你输出任何文本前,传送出所有的cookie。否则PHP会给出警告,并且cookie也不会被传送。因此,这样做是正确的方法:

<?php
setcookie
('name', 'jeff'
);
echo
"Hello Everyone!"
;
?>

以下是错误地:

<?php
$today
= mktime(12,0,0,6,25,1999
);
echo
'Here it is '.date('g:i:s a, F d, Y',$today
);
echo
''
;
echo
'In GMT it is '.gmdate('g:i:s a, F d, Y',$today
);
?>

PHP 相关文章推荐
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php/js获取客户端mac地址的实现代码
Jul 08 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
在PHP中使用与Perl兼容的正则表达式
Nov 26 #PHP
上传多个文件的PHP脚本
Nov 26 #PHP
使PHP自定义函数返回多个值
Nov 26 #PHP
PHP中for循环语句的几种变型
Nov 26 #PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 #PHP
PHP图片上传类带图片显示
Nov 25 #PHP
整合了前面的PHP数据库连接类~~做成一个分页类!
Nov 25 #PHP
You might like
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
php输出图像的方法实例分析
2017/02/16 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
理解JS事件循环
2016/01/07 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
Python 中Pickle库的使用详解
2018/02/24 Python
python基础教程项目二之画幅好画
2018/04/02 Python
Python使用gRPC传输协议教程
2018/10/16 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
python中 * 的用法详解
2019/07/10 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
创业计划书如何编写
2014/02/06 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
职位说明书范文
2014/05/07 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
市场营销专业自荐书
2014/06/10 职场文书
人大代表选举标语
2014/10/07 职场文书
校友会致辞
2015/07/30 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
JS数组去重详情
2021/11/07 Javascript