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+Tidy-完美的XHTML纠错+过滤
Apr 10 PHP
php图片验证码代码
Mar 27 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
php中长文章分页显示实现代码
Sep 29 PHP
PHP比你想象的好得多
Nov 27 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
6个超实用的PHP代码片段
Aug 10 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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
ThinkPHP标签制作教程
2014/07/10 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
node.js基础知识汇总
2020/08/25 Javascript
Python数据类型学习笔记
2016/01/13 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
python3大文件解压和基本操作
2017/12/15 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
化工专业个人的求职信范文
2013/11/28 职场文书
高二英语教学反思
2014/01/19 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
建设投标担保书
2014/05/13 职场文书
总经理检讨书范文
2015/02/16 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python