「Chromeの SameSite Cookie の変更に対応する」
カード決済や3Dセキュア等の決済連携でPOST値で戻ってくる場合に
ChromeのSameSite Cookie の変更に対応するには
回答
以下、完全かどうかわからないですが、対処のソースコードです。
「iOS12以下」又は「Safari12以下」又は「Mac OS 10.4(Mojave)でSafari13以下」の場合には
SameSite属性とセキュア属性を設定せずにクッキーを設定し、
それ以外の場合は
SameSite=None属性とセキュア属性を設定してクッキーを設定しています。
ソース
<?php
$ua=$_SERVER['HTTP_USER_AGENT'];
if(preg_match(
//iPhone,iPodの場合
'/(CPU\siPhone\sOS\s1[0-2]|'.
//iPadの場合
'iPad;\sCPU\sOS\s1[0-2]|'.
//MacでSafari12以下の場合
'Macintosh;\sIntel\sMac\sOS\sX.*Version\/1[0-2].*Safari|'.
//Mac10.14でSafari13以下の場合
'Macintosh;.*Mac\sOS\sX\s10_14.*\sAppleWebKit.*Version\/1[0-3].*Safari'.
')/i',$ua)){
//samesiteとセキュア属性なしでクッキーを設定
setcookie('cookiename', 'cookievalue', time()+24*60*60, '/','');
}else{
//samesiteとセキュア属性ありでクッキーを設定
//PHP7.3未満の場合
setcookie('cookiename', 'cookievalue', time()+24*60*60, '/; SameSite=None;', '', true);
//PHP7.3以降の場合
setcookie('cookiename', 'cookievalue', ['samesite' => 'None','secure'=>true,'expires'=>time()+24*60*60,]);
}