Zen Cart:Google Chrome SameSite Cookie対応について

2020年 2月頃にGoogleがブラウザChromeて、CookieのSameSiteのデフォルトの挙動を「None」から「Lax」に変更するということで、当時急いで修正したのが記憶に新しいですが、その後、新型コロナの影響で適用を延ばすということで、しばらくは問題もなく過ぎていきました。

最近、7月中旬からこの対応を含んだアップデートが提供されたようで、影響が出てきています。Zen Cartにおいて顕著にこの対応が影響するのは、外部サイトと連携する部分、つまりクレジットカード決済です。

Zen Cartで注文する直前まで進めてクレジットカード決済で、カード決済会社の画面でクレジットカード情報を入力し、戻ってくると「タイムアウト」になってしまう。そういう現象が発生しています。

原因

Zen CartのセッションはデフォルトでCookieにセッションIDを保存しています。よって、Cookieが取れなくなると自動的にログアウト扱いになるので「タイムアウト」画面が表示されます。

SameSite=Laxでは、「外部サイトがPOSTする場合、Cookieヘッダーは渡らない」仕様になっています。よって、SameSiteの影響を受けるかどうかは外部サイトがPOSTをしてZen Cartに戻ってくる場合に限ります。

注意点:SameSiteのiOS12/MacOS10.14対応

iOS12より前の機種と、MacOS 10.14より前の場合に「SameSite=None」が設定されていると「SameSite=Strict」扱いになってしまい、外部サイト連携ができなくなります。よって、$__SERVER['HTTP_USER_AGENT']で判定をして、該当の場合はSameSite属性を発行しないようにします。

対応:cookie_testに注意!

※3つ目に気づかずにハマりました。Zen CartではCookieが有効かどうかを判断するのにcookie_testというCookieを発行していますが、これにもSameSite対応をする必要があります。

この問題への対処でお困りのことがあれば、ご相談ください(有償対応となります)。