第三方 Cookie SameSite = Lax 對應 PHP 調整方式

by Ben
cookie-samsite

前言

因應最近第三方 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
導致在到第三方支付導回時就會被自動登出

file

甚至在 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

You may also like

Leave a Comment