您好,登录后才能下订单哦!
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。