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 getsiteurl()函数
Sep 05 PHP
php入门教程 精简版
Dec 13 PHP
php urlencode()与urldecode()函数字符编码原理详解
Dec 06 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
PHP写的简单数字验证码实例
May 23 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 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
PHP可变函数的使用详解
2013/06/14 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
超级强大的表单验证
2006/06/26 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
[02:27]刀塔重生降临
2015/10/14 DOTA
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
Python的Flask框架与数据库连接的教程
2015/04/20 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
python取代netcat过程分析
2018/02/10 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
Python socket 套接字实现通信详解
2019/08/27 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
经理职责范文
2013/11/08 职场文书
活动总结报告范文
2014/05/04 职场文书
大班亲子运动会方案
2014/06/10 职场文书
股权转让协议范本
2014/12/07 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2019新员工心得体会
2019/06/25 职场文书
500字作文之周记
2019/12/13 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript