跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
PHP Cookie基础
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= PHP Cookie基础 = '''Cookie'''是Web开发中用于在客户端(通常是浏览器)存储小型数据的技术。在PHP中,Cookie常用于跟踪用户会话、存储用户偏好设置或实现简单的身份验证机制。本教程将详细介绍PHP Cookie的基础知识、工作原理及实际应用。 == 什么是Cookie? == Cookie是由服务器发送到用户浏览器并保存在本地的一小段数据(通常不超过4KB)。浏览器会在后续的请求中自动将Cookie发送回服务器,从而允许服务器识别用户或存储用户特定的信息。 Cookie的主要特点包括: * '''键值对存储''':数据以名称-值对的形式保存。 * '''过期时间''':可以设置Cookie的有效期,过期后浏览器会自动删除。 * '''作用域''':可限制Cookie只在特定域名或路径下有效。 * '''安全性''':可通过Secure和HttpOnly标志增强安全性。 == 创建Cookie == 在PHP中,使用<code>setcookie()</code>函数创建Cookie。其基本语法如下: <syntaxhighlight lang="php"> setcookie(name, value, expire, path, domain, secure, httponly); </syntaxhighlight> 参数说明: * '''name''':Cookie的名称(必需)。 * '''value''':Cookie的值(可选,默认为空字符串)。 * '''expire''':过期时间(Unix时间戳)。若未设置,Cookie在会话结束时失效(关闭浏览器后删除)。 * '''path''':服务器上Cookie有效的路径(默认为当前目录及其子目录)。 * '''domain''':Cookie有效的域名(默认为当前域名)。 * '''secure''':若为<code>TRUE</code>,仅通过HTTPS传输Cookie。 * '''httponly''':若为<code>TRUE</code>,Cookie仅可通过HTTP协议访问(JavaScript无法读取)。 === 示例:设置一个简单的Cookie === 以下代码创建一个名为<code>username</code>的Cookie,值为<code>JohnDoe</code>,有效期为1小时: <syntaxhighlight lang="php"> <?php setcookie("username", "JohnDoe", time() + 3600, "/"); echo "Cookie 'username' 已设置。"; ?> </syntaxhighlight> '''输出:''' <pre> Cookie 'username' 已设置。 </pre> == 读取Cookie == PHP通过<code>$_COOKIE</code>超全局数组访问Cookie的值。例如: <syntaxhighlight lang="php"> <?php if (isset($_COOKIE["username"])) { echo "用户名: " . $_COOKIE["username"]; } else { echo "Cookie 'username' 未设置。"; } ?> </syntaxhighlight> '''输出(假设Cookie已设置):''' <pre> 用户名: JohnDoe </pre> == 修改和删除Cookie == === 修改Cookie === 只需再次调用<code>setcookie()</code>并更新值: <syntaxhighlight lang="php"> <?php setcookie("username", "JaneDoe", time() + 3600, "/"); echo "Cookie 'username' 已更新。"; ?> </syntaxhighlight> === 删除Cookie === 将过期时间设为过去的时间戳: <syntaxhighlight lang="php"> <?php setcookie("username", "", time() - 3600, "/"); echo "Cookie 'username' 已删除。"; ?> </syntaxhighlight> == 实际应用案例 == === 案例1:记住用户语言偏好 === 以下代码允许用户选择语言偏好并存储在Cookie中: <syntaxhighlight lang="php"> <?php if (isset($_POST["language"])) { setcookie("language", $_POST["language"], time() + (86400 * 30), "/"); $selectedLanguage = $_POST["language"]; } elseif (isset($_COOKIE["language"])) { $selectedLanguage = $_COOKIE["language"]; } else { $selectedLanguage = "en"; // 默认英语 } ?> <form method="post"> <label for="language">选择语言:</label> <select name="language" id="language"> <option value="en" <?= $selectedLanguage == "en" ? "selected" : "" ?>>English</option> <option value="es" <?= $selectedLanguage == "es" ? "selected" : "" ?>>Español</option> <option value="fr" <?= $selectedLanguage == "fr" ? "selected" : "" ?>>Français</option> </select> <button type="submit">保存</button> </form> </syntaxhighlight> === 案例2:简单的访问计数器 === <syntaxhighlight lang="php"> <?php $visitCount = isset($_COOKIE["visit_count"]) ? $_COOKIE["visit_count"] + 1 : 1; setcookie("visit_count", $visitCount, time() + (86400 * 365), "/"); echo "这是您第 $visitCount 次访问本站。"; ?> </syntaxhighlight> == Cookie的安全性注意事项 == * '''HttpOnly''':防止JavaScript通过<code>document.cookie</code>访问敏感Cookie(如会话ID)。 * '''Secure''':仅通过HTTPS传输Cookie,防止中间人攻击。 * '''SameSite''':限制跨站点请求时发送Cookie(可设为<code>Strict</code>、<code>Lax</code>或<code>None</code>)。 示例(安全的Cookie设置): <syntaxhighlight lang="php"> setcookie("session_id", "abc123", [ "expires" => time() + 3600, "path" => "/", "domain" => "example.com", "secure" => true, "httponly" => true, "samesite" => "Strict" ]); </syntaxhighlight> == 常见问题 == === 为什么我的Cookie没有生效? === 可能的原因: 1. <code>setcookie()</code>必须在输出任何内容(包括空格和HTML)之前调用。 2. 浏览器禁用了Cookie。 3. 域名或路径设置不正确。 === Cookie可以存储多少数据? === 大多数浏览器限制单个Cookie不超过4KB,且每个域名下最多允许50个Cookie(具体因浏览器而异)。 == 总结 == Cookie是PHP中管理客户端数据的核心工具之一。通过合理设置过期时间、作用域和安全标志,可以实现用户跟踪、偏好设置等功能。但需注意隐私和安全问题,避免存储敏感信息。 [[Category:编程语言]] [[Category:PHP]] [[Category:PHP会话与cookie]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)