程序员的知识教程库

网站首页 > 教程分享 正文

PHP cookie技术(php设置cookie永久有效)

henian88 2025-03-18 22:33:24 教程分享 41 ℃ 0 评论

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);
?>

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表