PHP中怎么设置Cookie?setcookie函数使用教程详解

来源:站长联盟作者:南京网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《PHP中怎么设置Cookie?setcookie函数使用教程详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP中怎么设置Cookie?setcookie函数使用教程详解》有用,将其分享出去将是对创作者最好的鼓励。

在PHP开发中,Cookie是一种在客户端存储少量数据的机制,常用于保存用户登录状态、偏好设置等信息,而setcookie函数是PHP中设置Cookie的核心内置函数,掌握它的用法是开发会话相关功能的基础。

PHP中怎么设置Cookie?setcookie函数使用教程详解

setcookie函数基础语法

setcookie函数的基本语法如下,所有参数都是可选除了第一个参数:

<?php
/**
 * setcookie函数参数说明
 * @param string $name Cookie的名称,必填
 * @param string $value Cookie的值,可选,默认空字符串
 * @param int $expires Cookie的过期时间,可选,默认是会话结束失效
 * @param string $path Cookie的有效路径,可选,默认是当前脚本所在目录
 * @param string $domain Cookie的有效域名,可选,默认是当前域名
 * @param bool $secure 是否仅通过HTTPS传输,可选,默认false
 * @param bool $httponly 是否禁止JavaScript访问,可选,默认false
 * @return bool 设置成功返回true,失败返回false
 */
setcookie(string $name, string $value = "", int $expires = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false): bool
?>

基础设置示例

设置一个最简单的Cookie,仅指定名称和值,该Cookie会在浏览器会话结束时自动失效:

<?php
// 设置一个名为user_name,值为zhangsan的Cookie
setcookie("user_name", "zhangsan");
?>

设置带过期时间的Cookie,比如让Cookie7天后失效,需要计算当前时间戳加上7天的秒数:

<?php
// 7天 = 7 * 24 * 60 * 60 秒
$expire_time = time() + 7 * 24 * 60 * 60;
setcookie("user_id", "1001", $expire_time);
?>

常用参数配置说明

路径与域名设置

默认情况下,Cookie仅在设置它的脚本所在目录下有效,如果需要让整个站点都能访问该Cookie,可以将路径设置为根目录:

<?php
// 设置Cookie在整个域名下都有效
setcookie("site_theme", "dark", time() + 3600 * 24 * 30, "/");
?>

如果需要让Cookie在二级域名下共享,可以指定域名参数:

<?php
// 让Cookie在*.ipipp.com下所有二级域名都能访问
setcookie("global_token", "abc123", time() + 3600, "/", ".ipipp.com");
?>

安全属性设置

如果站点启用了HTTPS,建议将secure参数设置为true,避免Cookie在HTTP传输中被窃取:

<?php
// 仅通过HTTPS传输该Cookie
setcookie("auth_token", "xyz789", time() + 3600, "/", "", true);
?>

将httponly参数设置为true,可以禁止JavaScript通过document.cookie访问该Cookie,降低XSS攻击的风险:

<?php
// 禁止JavaScript访问该Cookie
setcookie("session_id", "sess_123", time() + 1800, "/", "", false, true);
?>

Cookie的读取与删除

设置好的Cookie会在后续请求中通过$_COOKIE超全局数组传递给PHP,读取方式如下:

<?php
// 判断Cookie是否存在,再读取避免报错
if (isset($_COOKIE["user_name"])) {
    echo "当前用户名称:" . $_COOKIE["user_name"];
} else {
    echo "未获取到用户名称Cookie";
}
?>

删除Cookie的方式是将过期时间设置为当前时间之前,同时参数需要和设置时保持一致:

<?php
// 删除之前设置的user_name Cookie,路径需要和设置时一致
setcookie("user_name", "", time() - 3600, "/");
?>

注意事项

  • setcookie函数必须在PHP输出任何内容之前调用,否则会因为HTTP响应头已经发送而设置失败,报错提示headers already sent。
  • Cookie的值如果是中文或者特殊字符,建议先使用urlencode函数编码,读取时用urldecode解码,避免乱码问题。
  • 单个Cookie的大小通常限制在4KB左右,且浏览器对单个域名的Cookie数量也有限制,不适合存储大量数据。
  • Cookie是存储在客户端的,用户可以手动修改或删除,因此不要存储敏感信息,或者需要对存储的内容进行加密处理。
注意:如果需要在请求中发送Cookie相关的HTTP头信息,也可以使用header函数手动设置Set-Cookie头,但是setcookie函数的封装更便捷,优先使用setcookie即可。

PHPCookiesetcookieHTTP_响应头修改时间:2026-07-13 23:06:25

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。