当用户利用浏览器再去访问做事器中的web资源时, 就会带着各自的数据去。
cookie技能理解:
1 cookie是做事器给客户真个, 以Set-Cookie: name=shunping; expires=Wed, 21-Sep-2011 07:53:25 GMT回送客户端http相应,

当浏览器获取到该信息后, 就会将该cookie数据保存到客户真个cookie文件中, 文件名格式:用户名@网站URL
2 cookie保存的便是字符串(包括中文), 默认会对中文进行urlencode进行编码, 而解码采取urldecode进行解码,
3 cookie可以有多个键<==>值对, 可以给不同的键值, 指定不同的有效韶光;
在一个文件内可以单独删除过期的cookie键值对, 而保留未过期的cookie键值对
window 7 操作系统存放位置
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies
由于系统默认是隐蔽这些文件, 对此我们须要在文件选项中将隐蔽选项去掉。
setcookie()函数利用
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false[, bool $httponly = false ]]]]]] )
name 必要参数, 输入的cookie名字
value 可选参数, 输入的cookie的值, 保存在客户端
expire 可选参数, 是通过在php.ini文件中由session.cookie_lifetime选项设置的值, cookie的有效韶光, 是个Unix韶光戳,
默认值为0, cookie 将会在会话结束后(一样平常是浏览器关闭)失落效, 单位秒
语法存不才面的分外值:
0: 默认值;
time()-1: 删除COOKIE通用形式, setCookie('key', '', time()-1);
PHP_INT_MAX: 逻辑上表示永久有效。
path 可选参数。在做事器的有效路径, 也是通过php配置文件指定的值, 在php.ini中由session.cookie_path选项设置的值,
默认值为"/",表示在cookie中要设置的路径在全体域内都有效。
domain 可选参数。有效的域名, 如设置为'.xxxxxx.com', cookie能在此域名下的所有子域都有效;
把稳:配置文件为空值(session.cookie_domain =)
当前目录下只能获取同级以及上级Cookie信息, 但是不能获取子目录下的Cookie信息。
secure 可选参数。指明是否仅通过安全的https连接中传送, 默认值false
httponly 可选参数。设置此参数为true, 则cookie不会受脚本措辞(如Javascript)所影响, 默认值为false, 此参数是php 5.2.0新加入的
把稳:setcookie()函数必须位于<html> 标签之前。
语法上的问题:
1 $_COOKIE仅仅支持获取COOKIE数据而不能设置COOKIE数据
$_COOKIE['key'] = 'value'; 是不可行的
2 $_COOKIE仅仅可以获取当前要求携带的COOKIE数据
导致下面的语法征象, 当前脚本周期设置的COOKIE, 不能利用$_COOKIE获取到值
setCookie('key','value');var_dump($_COOKIE); //返回值:array(0){}
3 COOKIE数据仅仅支持字符串类型(实际上:int bool float等标量类型自动会转换成字符串)
<?php$value = mt_rand(1, 9); //随机显示1-9的整数setCookie('key', $value);echo gettype($_COOKIE['key']); //显示结果:string?>
setcookie("array",array("name"=>'hkz')); //不支持数组类型Warning: setcookie() expects parameter 2 to be string
实例:
<?php$value = 'something from somewhere';setcookie("TestCookie", $value);setcookie("TestCookie", $value, time()+3600);setcookie("TestCookie", $value, time()+3600, "/test", ".example.com", 1);?>
.example.com .加上兼容性更多的浏览
<?phpsetcookie("cookie[three]", "cookiethree");setcookie("cookie[two]", "cookietwo");setcookie("cookie[one]", "cookieone");if (isset($_COOKIE['cookie'])) {foreach ($_COOKIE['cookie'] as $name => $value) {echo "$name : $value <br />\n";}}?>
上例将输出:three : cookiethreetwo : cookietwoone : cookieone
<?phpsetcookie("cookie['three']", "cookiethree");setcookie("cookie['two']", "cookietwo");setcookie("cookie['one']", "cookieone");if (isset($_COOKIE['cookie'])) {foreach ($_COOKIE['cookie'] as $name => $value) {echo "$name : $value <br />\n";}}?>
上例将输出:three : cookiethreetwo : cookietwoone : cookieone\'three\' : cookiethree\'two\' : cookietwo\'one\' : cookieone
因此setcookie("cookie[three]", "cookiethree")下three不适宜加引号;
数组形态的Cookie运用
<?phpsetcookie("user[username]","skygo"); //设置为$_COOKIR["user"]["username"]setcookie("user[password]",md5("12345")); //设置为$_COOKIE["user"]["password"]setcookie("user[email]","zhangsan@163.net"); //设置为$_COOKIE["user"]["email"];foreach($_COOKIE["user"] as $key => $value){echo $key.":".$value."\n";}?>
删除Cookie三种方法
<?phpsetcookie("Account");setcookie("isLogin","",time()-1);setcookie("test","",time()+1800) //0.5小时后失落效?>
删除Cookie和重定向
<?phpsetCookie("test","",time()-3600); //删除Cookieheader("Location:http://localhost/dingxiang.php"); //重定向页面exit();?>
利用header()函数设置cookie;
header("Set-Cookie:name=$value[;expires=$expires[;path=$path[;domain=$domain[;...]]]");
后面的参数和上面列出setcookie()函数的参数一样.
比如: $value = 'something from somewhere';
header("Set-Cookie:name=$value");
实例:
<?php//1、设置相应头信息header('Content-type:text/html; charset=utf-8');//2、设置相应头,设置cookie参数(username与password)header('Set-Cookie:username=admin; expires='.gmdate('D, d-M-Y H:i:s',time()+3600).' GMT');header('Set-Cookie:password=123456; expires='.gmdate('D, d-M-Y H:i:s',time()+3600).' GMT',false); //设置第二个参数,避免覆盖echo $_COOKIE['username'];echo $_COOKIE['password'];?>
实际利用时
Cookie适宜完成:
永劫光保存, 敏感性相对较低(进行了安全处理的敏感数据)。
例如:存储上岸状态, 记录用户搜索习气, 未登录时购物车。
利用中, 须要把稳:
COOKIE, 可能受限于浏览器, 导致COOKIE的数据量受到限定。
cookie无法保存数组
序列化和反序列化在cookie中的运用
办理方法:把复合数据类型数组转换为字符串, 保存在cookie中, 利用序列化
重新把字符串转换成数组, 进行反序列化处理
<?phpheader("Content-type: text/html; charset=utf-8");$user_info = array("username"=>"老王", "sex"=>"男", "age"=>30);$user = serialize($user_info);setcookie('user', $user);if(isset($_COOKIE['user'])){echo $_COOKIE['user'];}$userinfo = $_COOKIE['user'];$userinfo = unserialize($userinfo);var_dump($userinfo);?>
json在cookie中的运用
json_encode(数组): 把数组转换为json格式的字符串
json_decode(json格式的字符串,[true/false]): 把json格式的字符串转换为工具(默认值:false)或者数组(true)
<?phpheader("Content-type: text/html; charset=utf-8");$user_info = array("username"=>"老王", "sex"=>"男", "age"=>30);$user = json_encode($user_info);setcookie('user', $user);if(isset($_COOKIE['user'])){echo $_COOKIE['user'];}$userinfo = $_COOKIE['user'];$userinfo = json_decode($userinfo);var_dump($userinfo);?>