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的FTP学习(一)[转自奥索]
Oct 09 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
php连接函数implode与分割explode的深入解析
Jun 26 PHP
在Linux系统下一键重新安装WordPress的脚本示例
Jun 30 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
一个简单的php路由类
May 29 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
php的扩展写法总结
May 14 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
python3抓取中文网页的方法
2015/07/28 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
Django  ORM 练习题及答案
2019/07/19 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
幼师个人总结范文
2015/02/28 职场文书
PyTorch的Debug指南
2021/05/07 Python
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js