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 相关文章推荐
我的论坛源代码(五)
Oct 09 PHP
c#中的实现php中的preg_replace
Dec 21 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
php中长文章分页显示实现代码
Sep 29 PHP
php addslashes 利用递归实现使用反斜线引用字符串
Aug 05 PHP
php实现mysql封装类示例
May 07 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
PDO::getAttribute讲解
Jan 28 PHP
PHP getName()函数讲解
Feb 03 PHP
YII2框架使用控制台命令的方法分析
Mar 18 PHP
PHP底层运行机制与工作原理详解
Jul 31 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
ajax php 实现写入数据库
2009/09/02 PHP
服务器web工具 php环境下
2010/12/29 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
Pytorch之Variable的用法
2019/12/31 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
银行求职信个人范文
2013/12/16 职场文书
会计辞职信范文
2014/01/15 职场文书
2014自主招生自荐信策略
2014/01/27 职场文书
中介业务员岗位职责
2014/04/09 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
党校个人总结
2015/03/04 职场文书
我的长征观后感
2015/06/09 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS