內容目錄
前言
因應最近第三方 Cookie 的規則
PHP 在 setcookie func 也要有相對應的修正
這篇文章寫的相當詳細
值得好好拜讀一波
以下就介紹自己遇到的問題和對應調整
問題
原始解法
解法在上面這篇文章裡其實都有寫到
而這篇文章也有提到 PHP 7.3 前後差別的寫法
同時官方文件 也有提用 options 的寫法
所以我們就使用了官方文件底下好心人的解法
<?php
$arr_cookie_options = array (
'expires' => time() + 60*60*24*30,
'path' => '/',
'domain' => '.example.com', // leading dot for compatibility or use subdomain
'secure' => true, // or false
'httponly' => true, // or false
'samesite' => 'None' // None || Lax || Strict
);
setcookie('TestCookie', 'The Cookie Value', $arr_cookie_options);
?>
以為這樣就可以解決 殊不知
不知道為何在呼叫某支 api 時
cookie 總是被變更成 Lax
導致在到第三方支付導回時就會被自動登出
甚至在 index.php 裡加上一段
session_set_cookie_params(['SameSite' => 'None', 'Secure' => true]);
也沒用
強制解法
後來沒辦法
只好在該 api 內強制加一段 func 去呼叫上面的 setcookie
(原本是一旦載入 index.php 就呼叫)
這樣的結果就是導致在會 setcookie
兩次
但至少最後一次會是 samesite = none
也算是解決了問題…
算是個經驗教訓吧
cookie 真是個奇妙的玩意…
參考資料
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite