Cookie ?
百度百科:Cookie
维基百科:Cookie
我的个人理解:
- cookie 是存储在客户端(一般是浏览器)的一段小文本
- cookie 由服务端发送給客户端,发送方式:http头
- 如果客户端中存储着站点的cookie,每次访问此站点都会带上cookie
举个例子:
你是酱油铺的老板,每天都会有十几个戴着面具和穿这衣服的人来打酱油(假设面具与衣服一模一样,你辨认不出来),但酱油铺每天的存货有限,每人每天只能打一瓶酱油。现在有个不坏好意的人想一天打多瓶酱油,让酱油铺缺货,从而导致后面的客人无法买到酱油,你为了遏止这种恶意行为,在每位已经购买了酱油的客人做了一个标记,以这种方法来辨别客人是否已经购买酱油,保证了购买的公平性。
当然,上面的例子是我随意构造出来的,比喻并不是很准确。
在上面的例子中,酱油铺老板就是服务端,客人就是客户端,那个标志就是cookie。
为什么需要cookie?
“需求-供应” 关系永远都不会变,有需求就有供应,cookie技术的出现也不例外。
web世界中,传输WWW文件(html,javascript,css,image.......)使用的是HTTP协议,而HTTP协议是无状态协议,也就是说,就算你客户端与服务端刚刚传输了文件,你再次发送请求,服务端也不会记得“你丫的是谁”。那要是我开发的网站一定要服务端“辨别”出客户端呢?那就开个新技术咯
所以cookie就被搞出来了。就像酱油店的老板的做法一样。下次客户端访问服务端的时候就会带上服务端给的cookie,服务端通过cookie就可以辨认客户端了。
相关函数
- setcookie() -- 设置Cookie
// 函数原型
setcookie($cookieName [,$cookieValue="" [,$expire=0 [,$path="" [,$domain="" [,$secure=false [,$httponly=false]]]]]])
相关数组
- $_COOKIE[ ] -- 保存cookie相关信息
设置一个简单的cookie
<?php
$returnValue = setcookie('cookie_1'); // cookie名称为cookie_1 值不设置
var_dump($returnValue); // 打印setcookie()返回值
?>
//运行结果
D:\WampServer\www\MyPhpCode\01.php:33:boolean true
cookie信息
为cookie设置值
<?php
$returnValue = setcookie('cookie_2','cookie_2_value'); // cookie名称:cookie_2 , cookie值:cookie_2_value
var_dump($returnValue);
?>
// 运行结果
D:\WampServer\www\MyPhpCode\01.php:28:boolean true
cookie详细
细心的读者可能发现了一个问题:之前创建的cookie_1到哪里去了?
emm...... 消失了,对的,它已经人间蒸发了。
人间蒸发????那我这么辛苦的码了两行代码才搞到客户端里的小饼干(cookie)就这么没了???
**再运行下php脚本,火速到浏览器查看下cookie。
Image cookie到期时间为“浏览器回话结束”,嗯哼,那么说我的小饼干会在页面关闭后消失咯。 。。。。。
怎么玩?唯有续命
给小饼干续命就用第三个参数 expire
expire参数设置cookie的有效期,也就是小饼干更可以活多久,至于活多久,就由你来决定了。
注意:此参数接收时间戳。php会内部转换日期。
为cookie设置到期时间
<?php
$returnValue = setcookie('cookie_3','cookie_3_value',time()+30); // cookie有效时间为 30 秒
var_dump($returnValue);
?>
cookie详细time()函数用于获取当前时间的时间戳
<?php
/**
* 此php用于获取上面的设置的cookie(cookie_3)的值
* 获取方式:$_CIOOKIE[]
* 要在cookie_3创建30秒内获取,不然你会收到错误:‘Notice: Undefined index: cookie_3 ’
*/
$cookieName = "cookie_3" ; // 要获取的cookie的名称
$cookieValue = $_COOKIE[$cookieName]; // 获取对应值
var_dump($cookieValue);
?>
// 输出
D:\WampServer\www\MyPhpCode\02.php:5:string 'cookie_3_value' (length=14)
恍恍惚惚 反反复复等等 ???cookie不是保存在客户端的么,php运行在服务端,为什么php可以搞到客户端的cookie??。那是因为客户端访问服务端时会带上cookie。
为cookie设置路径
路径,哦~~,cookie在客户端的存储路径而已,路径这种东西我早就知道了,不用说了。 呵,年轻人其实cookie的路径并不是指客户端的存储路径,而是指php脚本在服务器的路径。看下面操作。
网站结构
WWW
|
|- MyPhpCode
| |- 01.php
| |- 02.php
|
|- MyPhpCode2
| |- 01.php
网站根目录:WWW
/MyPhpCode/01.php:创建cookie
/MyPhpCode/02.php:获取cookie值
/MyPhpCode2/01.php:获取cookie值
现在用/MyPhpCode/01.php来设置一个cookie,然后使用/MyPhpCode2/01.php来读取cookie看看结果如何
<?php
/**
* /MyPhpCode/01.php
*/
$returnValue = setcookie('cookie_4','cookie_4_value',time()+60,'/MyPhpCode'); // 指定路径为 /MyPhpCode
var_dump($returnValue);
?>
cookie详细
/**
* /MyPhpCode2/01.php
*/
<?php
$cookieName = "cookie_4" ;
$cookieValue = $_COOKIE[$cookieName]; // 获取 cookie_4的值
var_dump($cookieValue);
?>
// /MyPhpCode2/01.php 输出
D:\WampServer\www\MyPhpCode2\01.php:5:null
同时还报了 Notice: Undefined index: cookie_4 错误
并不能读取cookie_4的值
现在用 /MyPhpCode/02.php 来尝试下
/**
* /MyPhpCode/02.php
*/
<?php
$cookieName = "cookie_4" ;
$cookieValue = $_COOKIE[$cookieName]; // 获取 cookie_4的值
var_dump($cookieValue);
?>
// /MyPhpCode/02.php 输出
D:\WampServer\www\MyPhpCode\02.php:5:string 'cookie_4_value' (length=14)
以上对比可以看出,如果设置了cookie的路径,要与设置cookie的php处于同于路径之下才有权访问cokie。
到这里,PHP中cokie的操作已经介绍的 七七八八了 ,至于setcookie() 函数后面几个参数,哼哼哼哼哼哼哈哈哈哈哈哈哈哈哈,我也不太了解,这么跟你说吧,我就是半吊子。等有空学下其他的cookie操作再续写文章了。
-
网友评论