Chromeの SameSite Cookie の変更に対応する

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