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生成EXCEL的东东
Oct 09 PHP
php+mysql写的简单留言本实例代码
Jul 25 PHP
php执行sql语句的写法
Mar 10 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
phpfpm的作用和用法
Oct 10 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
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
Javascript valueOf 使用方法
2008/12/28 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
javascript getElementsByClassName函数
2010/04/01 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
Vue计算属性的使用
2017/08/04 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
使用pytorch实现论文中的unet网络
2020/06/24 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
django使用channels实现通信的示例
2020/10/19 Python
详解Scrapy Redis入门实战
2020/11/18 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
统计员岗位职责
2013/11/14 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
道歉信范文
2015/05/12 职场文书
情况说明书怎么写
2015/10/08 职场文书
MySQL七大JOIN的具体使用
2022/02/28 MySQL