您好,登录后才能下订单哦!
# PHP中如何完成Cookie的创建、读取和删除
## 一、Cookie基础概念
### 1.1 什么是Cookie
Cookie是服务器留在用户计算机中的小型文本文件,用于存储特定用户会话或持久化数据。当用户访问网站时,服务器可以通过HTTP头将Cookie发送到浏览器,浏览器会将其保存并在后续请求中自动携带。
### 1.2 Cookie的工作原理
1. 服务器通过`Set-Cookie`响应头创建Cookie
2. 浏览器存储Cookie(内存或硬盘)
3. 后续请求通过`Cookie`请求头自动发送回服务器
### 1.3 Cookie与Session的区别
| 特性 | Cookie | Session |
|-------------|-------------------------|-----------------------|
| 存储位置 | 客户端 | 服务器端 |
| 安全性 | 较低(可被篡改) | 较高 |
| 生命周期 | 可长期保存 | 通常随会话结束而销毁 |
| 存储容量 | 有限(约4KB) | 理论上只受内存限制 |
## 二、PHP中创建Cookie
### 2.1 基本创建方法
PHP通过`setcookie()`函数创建Cookie:
```php
setcookie(
"user", // Cookie名称
"JohnDoe", // Cookie值
time() + 3600, // 过期时间(1小时后)
"/", // 有效路径
"example.com", // 域名
false, // 仅HTTPS
true // 仅HTTP访问(防JS读取)
);
time() + 60*60*24*7
= 7天后过期/
表示全站可用.example.com
允许子域名访问setcookie("user[username]", "admin");
setcookie("user[email]", "admin@example.com");
// 读取时自动转为数组:$_COOKIE['user']['username']
问题1:Cookie未生效 - 检查输出前是否有空格/HTML输出(必须在头部) - 确保域名/路径设置正确
问题2:特殊字符处理
setcookie("test", urlencode("值包含#&="));
$value = urldecode($_COOKIE['test']);
PHP通过$_COOKIE
超全局数组访问:
if(isset($_COOKIE["user"])){
echo "欢迎回来," . htmlspecialchars($_COOKIE["user"]);
} else {
echo "首次访问!";
}
$clean_value = filter_var($_COOKIE['user'], FILTER_SANITIZE_STRING);
if(isset($_COOKIE['user'])){
echo "用户名:" . $_COOKIE['user']['username'];
echo "邮箱:" . $_COOKIE['user']['email'];
}
setcookie("test_cookie", "1", time()+3600);
if(count($_COOKIE) > 0) {
echo "Cookie已启用";
} else {
echo "请启用Cookie";
}
setcookie("user", "", time() - 3600, "/");
// 同时清除本地变量
unset($_COOKIE["user"]);
foreach($_COOKIE as $name => $value) {
setcookie($name, "", time() - 3600, "/");
unset($_COOKIE[$name]);
}
// 登录成功时
setcookie("auth_token", md5($username.$secret), time()+60*60*24*30, "/", "", true, true);
// 验证时
if(isset($_COOKIE['auth_token'])){
// 查询数据库验证token有效性
}
// 保存主题选择
setcookie("theme", "dark", time()+60*60*24*365, "/");
// 应用主题
$theme = isset($_COOKIE['theme']) ? $_COOKIE['theme'] : 'light';
echo '<body class="'.$theme.'-theme">';
$visits = isset($_COOKIE['visits']) ? $_COOKIE['visits']+1 : 1;
setcookie("visits", $visits, time()+60*60*24*30);
echo "这是您第".$visits."次访问";
// 加密
$iv = openssl_random_pseudo_bytes(16);
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, 0, $iv);
setcookie("secure_data", base64_encode($iv.$encrypted));
// 解密
$data = base64_decode($_COOKIE['secure_data']);
$iv = substr($data, 0, 16);
$value = openssl_decrypt(substr($data, 16), 'AES-256-CBC', $key, 0, $iv);
setcookie("samesite", "value", [
'expires' => time()+3600,
'path' => '/',
'samesite' => 'Strict' // 或Lax/None
]);
大多数浏览器限制为4KB左右,每个域名约50-150个Cookie。
需要设置域名参数为.example.com
(注意开头的点)
setcookie("shared", "data", time()+3600, "/", ".example.com");
立即生效,但$_COOKIE
数组需刷新页面后更新。
Cookie作为Web开发的基础技术,合理使用可以极大提升用户体验。本文详细介绍了PHP中Cookie的创建、读取和删除全流程,并提供了实际应用案例和安全建议。记住:Cookie不是安全的数据存储方式,重要数据应结合服务器端验证和加密措施。
最后更新:2023年11月 | 作者:助手 | 字数统计:约2800字 “`
这篇文章采用Markdown格式编写,包含: 1. 清晰的结构化标题 2. 代码块示例 3. 表格对比 4. 安全注意事项 5. 实际应用案例 6. 常见问题解答 7. 完整的字数统计
您可以直接复制到Markdown编辑器中使用,或根据实际需求调整内容细节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。