网站首页 > 基础教程 正文
最近我在开发WordPress主题的时候,偶然间发现 cookies 无法保存的问题,以前一直都是使用 setcookie() 函数来定义设置cookies都没啥问题。那么到底是什么原因造成的呢?
通过翻阅一下手册后我才发现是因为在 PHP>=7.3.0 版本后,setcookie 开始支持设置 SameSite ,语法有了修改造成的。OK,问题找到了!解决吧!直接改成下面新的写法,不仅能够正确定义 cookies ,浏览器也不会再报 SameSite 黄字错误了。
SameSite值及释义
- Strict:完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。
- Lax:大多数情况不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。
- None:对于正确支持 None 参数的浏览器,可以正确发送 cookie。
PHP 版本大于等于 7.3.0 时的正确写法
/**
* PHP >= 7.3.0 Cookie
* @Author Jackie
* @Author url https://www.themeke.com
*/
setcookie($name, $value, [
'expires' => $expire,
'path' => $path,
'domain' => $domain,
'secure' => $secure,
'httponly' => $httponly,
'samesite' => $samesite
]);
最后为了让它能够适应PHP各种版本,我们可以做一个版本判断并使用函数给封装起来,这样无论是什么版本都可以直接方便的使用了。
PHP 全版本适用写法
/**
* Support samesite cookie in both php 7.2 and php >= 7.3
* By Jackie https://www.themeke.com/
* @param string $name
* @param string $value
* @param int $expire
* @param string $path
* @param string $domain
* @param bool $secure
* @param bool $httponly
* @param string $samesite
* @return void
*/
function setTkCookie($name,$value,$expire,$path,$domain,$secure,$httponly,$samesite):
void{
if (PHP_VERSION_ID < 70300) {
setcookie($name, $value, $expire, $path . '; samesite=' . $samesite, $domain, $secure, $httponly);
return;
}
setcookie($name, $value, [
'expires' => $expire,
'path' => $path,
'domain' => $domain,
'samesite' => $samesite,
'secure' => $secure,
'httponly' => $httponly,
]);
}
猜你喜欢
- 2024-10-22 PHP为什么受欢迎?和Python、ASP.NET相比优势体现在哪些方面?
- 2024-10-22 百度优化建议合理使用cookie如何解决
- 2024-10-22 cookie窃取和session劫持 cookie被攻击者截获
- 2024-10-22 WAF-Bypass之SQL注入绕过思路总结
- 2024-10-22 将CRLF注入PHP的cURL选项 crlf注入的原理
- 2024-10-22 session和cookie的两种会话技术 请论述session和cookie技术的区别
- 2024-10-22 “黑客”入门学习之“Cookie技术详解”
- 2024-10-22 惊艳面试官的 Cookie 介绍 cookie面试题
- 2024-10-22 如何请求一个需要登陆才能访问的接口(基于cookie)——apipost
- 2024-10-22 四十,phpMyAdmin 4.8.1后台文件包含漏洞复现及详解
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)