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控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
PHP 判断常量,变量和函数是否存在
Apr 26 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
一个PHP分页类的代码
May 18 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
php的dl函数用法实例
Nov 06 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
php制作的简单验证码识别代码
Jan 26 PHP
Yii2框架控制器、路由、Url生成操作示例
May 27 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 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
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php简单分页类实现方法
2015/02/26 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
js中eval详解
2012/03/30 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
python如何实现视频转代码视频
2019/06/17 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
英国计算机商店:Technextday
2019/12/28 全球购物
MySQL面试题目集锦
2016/04/14 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
银行求职自荐信范文
2015/03/04 职场文书
二胎满月酒致辞
2015/07/29 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers