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中eclipse 用空格替换 tab键
Jun 24 PHP
php图片缩放实现方法
Feb 20 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
thinkPHP模板引擎用法示例
Dec 08 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP开发实现快递查询功能详解
Apr 08 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 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注入实例
2006/10/09 PHP
php学习之流程控制实现代码
2011/06/09 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
js闭包的用途详解
2014/11/09 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
JS中数组重排序方法
2016/11/11 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
Python编程argparse入门浅析
2018/02/07 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
Django组件content-type使用方法详解
2019/07/19 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
pandas参数设置的实用小技巧
2020/08/23 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
学校募捐倡议书
2014/05/14 职场文书
导师就业推荐信范文
2014/05/22 职场文书
企业文化标语口号
2014/06/09 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python