首先了解一下什么是cookie ?
cookie是服务器留在用户计算机中的一小段文本信息
可以实现多个页面的数据交换
下面来张图了解一下cookle的机制
当用户访问浏览器时,服务器会生成对应的cookie并发送到浏览器,浏览器会保存这个cookie,当用户下次再访问时浏览器会带上这个cookie一并请求服务器
cookle的创建
setcookie(name,value,[expire,path,domain,secure]);
name : cookie的变量名;
value: cookie变量的初始值
expire:cookie 的有效时间(当不设置时间时,默认会在浏览器关闭时cookie失效)
path:cookie 的相关路径
domain:变量可使用的域
secure:在https的安全传输时才有效
注:cookie创建使用的一些限制
- cookie变量名和值是必须要有的并且只能是字符串
- 需在脚本文件的内容输出之前设置,否则设置不成功(在创建cookie之前不能有任何输出内容)
- cookie设置完成后不能马上读取(设置cookie以后,下次访问时浏览器才会带上访问,所以不能马上读取)
- 一个页面的cookie总数不超过20 总大小小于40kb
cookie的获取
获取cookie的值使用 $_COOKIE及修改
$_COOKIE其实是一个数组所以使用时可以用$_COOKIE['名']
<?php
//查看名为lie的cookie
print_r($_COOKIE['lie']);
//cookie的修改
setcookie('lie','aaa'); //把名字为lie的cookie内容改为aaa;
?>
COOKIE 的删除
1.可以把cookie的值设置为null 或‘’;
2.用cookie过期来删除cookie的值
<?php
//将cookie的值设为空
setcookie('lie','');
//将cookie的值设置为null
setcookie('lie',null);
//将cookie的时间过期一般用过期来删除cookle
/*
time() + N 代表N秒后过期
time() - N 代表以过期N秒
*/
setcookie('lie','aaa',time()-10);
?>
那接下来我们来个小练习
COOKIE实现URL浏览记录
<?php
/*cookle实现url浏览记录
思路:
1.获取当前的url
2.把url放到cookle中
3.读取cookle的值
*/
/*获取当前url用到了$_SERVER['REQUESR_URL']
cookle只能存放一条数据 存放多条数据需要用到数组
但cookle的值只能是字符串
解决方案:用到系统内置的序列化函数serialize()与 反序列化函数unserialize()
所谓序列化函数serizlize()就是把数组转换成字符串
相反 unserialize()就是把转换成的字符串在转换为数组
$arr = [1,2,3];
$newArr = serialize($arr); //
print_r(unserialize($newArr)) ; //
*/
//获取到url地址
$url = $_SERVER['REQUEST_URI'];
$arr = [];
//首先要判断是否有浏览记录如果有的话那就把它提取提取出来如果没有的话就新建一个
if (isset($_COOKIE['lie'])) {
$arr = unserialize($_COOKIE['lie']); //cookie['lie']提取出来的是字符串所以用反序列化函数
array_unshift($arr, $url); //将最新的记录放在数组的最开始
$arr = array_unique($arr); //去除重复的浏览记录
if(count($arr) > 10){ //只让显示10条浏览记录
array_pop($arr);
}
setcookie('lie',serialize($arr)); //将浏览记录放入cookie中
} else {
$arr[] = $url;
setcookie('lie',serialize($arr));
}
echo "URL浏览记录:";
echo "<ol>";
foreach ($arr as $key => $value) {
echo "<li>".$value."</li>";
}
echo "</ol>";
echo '<hr /><a href="?id='.mt_rand(1,100).'">随机产生地址</a>';
?>
结果图如下: