专业编程基础技术教程

网站首页 > 基础教程 正文

PHP 7.3+ 版本如何正确地定义cookies的写法

ccvgpt 2024-10-22 10:36:45 基础教程 13 ℃

最近我在开发WordPress主题的时候,偶然间发现 cookies 无法保存的问题,以前一直都是使用 setcookie() 函数来定义设置cookies都没啥问题。那么到底是什么原因造成的呢?

通过翻阅一下手册后我才发现是因为在 PHP>=7.3.0 版本后,setcookie 开始支持设置 SameSite ,语法有了修改造成的。OK,问题找到了!解决吧!直接改成下面新的写法,不仅能够正确定义 cookies ,浏览器也不会再报 SameSite 黄字错误了。

PHP 7.3+ 版本如何正确地定义cookies的写法

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,
     ]);
 }

Tags:

最近发表
标签列表