原来PHP是这样用Cookie的?

张开发
2026/5/4 7:26:08 15 分钟阅读
原来PHP是这样用Cookie的?
原来PHP是这样用Cookie的?在 Web 开发中HTTP 是无状态的协议 —— 服务器无法记住 “你是谁”。而 Cookie 正是解决这个问题的核心手段记住登录状态、保存用户偏好、跟踪用户行为…… 这些高频需求都离不开 Cookie。Cookie 基础什么是 CookieCookie 是服务器发送给浏览器的一小段文本信息通常 ≤4KB浏览器会将其保存在本地。当用户再次访问同一网站时浏览器会自动把 Cookie 附带在请求中发送给服务器从而让服务器 “认出” 用户。简单理解Cookie 就像服务器给用户发的 “临时身份证”下次访问时出示即可。常用方法设置 Cookiesetcookie()PHP 中使用setcookie()函数设置 Cookie必须在任何输出包括 HTML 标签、空格、换行之前调用否则会报错。setcookie(string$name,// Cookie 名称必填string$value,// Cookie 值可选空则删除int$expires0,// 有效期时间戳0关闭浏览器失效string$path,// 作用路径空当前目录string$domain,// 作用域名空当前域名bool$securefalse,// 是否仅 HTTPS 传输bool$httponlyfalse// 是否仅 HTTP 访问禁止 JS 读取):bool有效期$expires:0默认会话 Cookie关闭浏览器后立即失效。time() 秒数持久 Cookie指定时间后失效。作用路径$path:控制 Cookie 在哪些目录下可用默认仅当前目录及其子目录可用。/全站可用最常用。/admin仅/admin目录及其子目录可用。作用域名$domain:控制 Cookie 在哪些域名下可用默认仅当前域名可用如www.example.com。.example.com主域名及所有子域名可用如www.example.com、admin.example.com。安全参数$secure和$httponly:生产环境强烈建议开启$secure true仅在HTTPS协议下传输 Cookie防止明文被窃取。$httponly true禁止 JavaScript 读取 Cookie通过document.cookie有效防止XSS 攻击窃取 Cookie。读取 Cookie$_COOKIE超全局变量Cookie 设置后下次请求时 PHP 会自动将其解析到$_COOKIE数组中我们可以直接读取。// 先判断 Cookie 是否存在if(isset($_COOKIE[username])){$username$_COOKIE[username];echo欢迎回来.htmlspecialchars($username).;}删除 Cookie删除 Cookie 的原理是将其有效期设置为过去的时间让浏览器自动失效。// 方法 1将有效期设为过去推荐最稳妥setcookie(username,,time()-3600);// 方法 2不设置值只设过期时间setcookie(username);echoCookie 已删除;对 Cookie 内容进行签名 :防止用户篡改 Cookie 值。用hash_hmac()生成签名验证时比对// 设置时签名$valueuser_id_1;$secretyour_secret_key;// 服务器端密钥$signaturehash_hmac(sha256,$value,$secret);setcookie(user,$value.|.$signature,time()3600);// 读取时验证if(isset($_COOKIE[user])){list($value,$sig)explode(|,$_COOKIE[user],2);if(hash_hmac(sha256,$value,$secret)$sig){// 验证通过Cookie 未被篡改echo有效用户.$value;}else{echoCookie 被篡改;}}

更多文章