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中显示格式化的用户输入
Oct 09 PHP
简单易用的计数器(数据库)
Oct 09 PHP
虚拟主机中对PHP的特殊设置
Oct 09 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
php模拟ping命令(php exec函数的使用方法)
Oct 25 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
php统计数组不同元素的个数的实例方法
Sep 26 PHP
php模拟实现斗地主发牌
Apr 22 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&amp;mysql(一)
2006/10/09 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
用python制作个视频下载器
2021/02/01 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
校园文明倡议书
2014/05/16 职场文书
师德师风的心得体会
2014/09/02 职场文书
党员个人年度总结
2015/02/14 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
python APScheduler执行定时任务介绍
2022/04/19 Python