Cookie(小甜饼)是客户端技术, 服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器中的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()函数必须位于 标签之前。
语法上的问题:
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等标量类型自动会转换成字符串)
setcookie("array",array("name"=>'hkz')); //不支持数组类型
Warning: setcookie() expects parameter 2 to be string
实例:
.example.com .加上兼容性更多的浏览
$value) {
echo "$name : $value
\n";
}
}
?>
上例将输出:
three : cookiethree
two : cookietwo
one : cookieone
$value) {
echo "$name : $value
\n";
}
}
?>
上例将输出:
three : cookiethree
two : cookietwo
one : cookieone
\'three\' : cookiethree
\'two\' : cookietwo
\'one\' : cookieone
因此setcookie("cookie[three]", "cookiethree")下three不适宜加引号;
数组形态的Cookie应用
$value){
echo $key.":".$value."\n";
}
?>
删除Cookie三种方法
删除Cookie和重定向
使用header()函数设置cookie;
header("Set-Cookie:name=$value[;expires=$expires[;path=$path[;domain=$domain[;...]]]");
后面的参数和上面列出setcookie()函数的参数一样.
比如: $value = 'something from somewhere';
header("Set-Cookie:name=$value");
实例:
实际使用时
Cookie适合完成:
长时间保存, 敏感性相对较低(进行了安全处理的敏感数据)。
例如:存储登陆状态, 记录用户搜索习惯, 未登录时购物车。
使用中, 需要注意:
COOKIE, 可能受限于浏览器, 导致COOKIE的数据量受到限制。
cookie无法保存数组
序列化和反序列化在cookie中的应用
解决方法:把复合数据类型数组转换为字符串, 保存在cookie中, 使用序列化
重新把字符串转换成数组, 进行反序列化处理
"老王", "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)
"老王", "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);
?>
本文暂时没有评论,来添加一个吧(●'◡'●)