2020年8月27日
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に注意!
- ショップをSSL化してクッキーのSecure属性をTrueにする
- セッション用に使うクッキーのSameSite=Noneをする
- cookie_test というクッキーのSameSite=Noneをする
※3つ目に気づかずにハマりました。Zen CartではCookieが有効かどうかを判断するのにcookie_testというCookieを発行していますが、これにもSameSite対応をする必要があります。
- includes/init_includes/init_sessions.php (もしくは includes/init_includes/overrides/init_sessions.php)にて、パスにSameSite対応をしてSecureにする
$path = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));
if (defined('SESSION_USE_ROOT_COOKIE_PATH') && SESSION_USE_ROOT_COOKIE_PATH == 'True') $path = '/';
$path = (defined('CUSTOM_COOKIE_PATH')) ? CUSTOM_COOKIE_PATH : $path;
$domainPrefix = (!defined('SESSION_ADD_PERIOD_PREFIX') || SESSION_ADD_PERIOD_PREFIX == 'True') ? '.' : '';
$secureFlag = ((ENABLE_SSL 'true' && substr(HTTP_SERVER, 0, 6) 'https:' && substr(HTTPS_SERVER, 0, 6) 'https:') || (ENABLE_SSL 'false' && substr(HTTP_SERVER, 0, 6) == 'https:')) ? TRUE : FALSE;
// 関数追加
function is_before_iOS12() {
// iOS12より前かどうか
if (preg_match('@iPhone; CPU iPhone OS (1[0-2]|[0-9][^0-9])@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
if (preg_match('@iPad; CPU OS (1[0-2]|[0-9][^0-9])@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
if (preg_match('@iPod touch; CPU iPhone OS (1[0-2]|[0-9][^0-9])@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
// MacOS 10.14より前かどうか
if (preg_match('@Macintosh; Intel Mac OS X 10_(1[0-4]|[0-9][^0-9]).*Safari@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
return false;
}
// 下記1行を追記
$path .= is_before_iOS12() ? '' : '; SameSite=None';
if (PHP_VERSION >= '5.2.0') {
session_set_cookie_params(0, $path, (zen_not_null($cookieDomain) ? $domainPrefix . $cookieDomain : ''), $secureFlag, TRUE);
} else {
session_set_cookie_params(0, $path, (zen_not_null($cookieDomain) ? $domainPrefix . $cookieDomain : ''), $secureFlag);
}
(中略)
zen_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, '/', (zen_not_null($current_domain) ? $current_domain : ''));
↓
zen_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, '/'. is_before_iOS12() ? '' : '; SameSite=None', (zen_not_null($current_domain) ? $current_domain : ''), $secureFlag);
この問題への対処でお困りのことがあれば、ご相談ください(有償対応となります)。
カテゴリー: Zen Cart(オンラインショップ構築)
タグ: オンラインショップ , ECサイト , Zen Cart , ZHE
Zen Cart ハイエンド版 のブログ記事をもっと見る
- Zen Cart:Google Chrome SameSite Cookie対応について
- Zen Cartハイエンド版の機能拡張:退会機能
- Zen Cartハイエンド版のモジュール:かんたん顧客管理機能でより詳細な絞り込みを
- Zen Cartハイエンド版のモジュール:point_basedeでポイント管理を行う
- Zen Cartハイエンド版のモジュール:social_buttonsによりコンテンツを共有する
- Zen Cartハイエンド版のモジュール:am_ajax_addressで郵便番号による住所自動入力をサポート
- Zen Cartハイエンド版のモジュール:product_csvで商品データの一括インポート・一括エクスポートをする
- Zen Cartハイエンド版のモジュール:email_templateで会員登録や注文時のメールの内容を変更する
- Zen Cartハイエンド版のモジュール:easy_adminで管理画面のメニューを自由にカスタマイズする
- Zen Cartハイエンド版の特徴(2):addon_modulesで画面ブロックの柔軟なレイアウトを
- Zen Cartハイエンド版の特徴(1):addon_modulesによる機能追加
- Zen Cart ハイエンド版:連載スタートにあたって(ポイント制, ゲスト購入, スマートフォン対応...)
Zen Cart ハイエンド版 のデモサイトを見る
« 前の記事:夏季休業(8月11日~14日)のお知らせ
» 次の記事:Movable Typeクラウド版(MTクラウド) PHP 7.4.11バージョンアップに伴うA-Form / A-Member / A-Reserve向け修正ファイル配布のお知らせ
アークウェブの本
Zen Cartによるオンラインショップ構築・運用テクニック―オープンソース徹底活用

内容充実のZen Cart公式本(v1.3対応)がついに発表です。アークウェブのスタッフをはじめZen-Cart.JPの中心メンバーが共著で執筆しました。続きを読む
新着はてブ
カテゴリー
- Shopify(ショピファイ)オンラインショップ構築
- NGO・NPO向け情報
- スマートフォン
- だれもが使えるウェブコンクール
- mixiアプリ
- OpenSocial (システム開発)
- アークウェブのCSR
- A-Form, A-Member, A-Reserve(MTプラグイン)
- Ruby on Rails(システム開発)
- necoったー
- Miqqle
- WebSig24/7
- ecoったー
- ビッグイシュー(The Big Issue)
- CSR(企業の社会的責任)
- マッシュアップ
- RIA (システム開発)
- セキュリティ(システム開発)
- 唐松(アクセス解析)
- Ajax (システム開発)
- テスト(システム開発)
- データベース
- PukiWiki
- Web 2.0
- SEO・サーチエンジン最適化
- XP・アジャイル(システム開発)
- Web・ITニュースクリップ
- Webアクセシビリティ
- Webデザイン
- SEM・サーチエンジン広告
- Webユーザビリティ
- CMS・MovableType
- Zen Cart(オンラインショップ構築)
- Snippy(SNS・ソーシャルブックマーク)
- アークウェブ
- オープンソース
- CMS(コンテンツマネジメント・システム)
- Webマーケティング
- AMP
- SNS