もうだいぶ前からですが、社内システムのWebページをFirefoxで見ているとコンソールに
Cookie “a” は “secure” 属性なしで “SameSite” 属性に “none” または不正な値が設定されているため、まもなく拒否されます。“SameSite” 属性についての詳細は https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite をお読みください。
と表示されていました。今後はCookieにSameSite属性をつけるのがよさそうです。
PHPでは
setcookie('a', $value, ['expires' =>time() + 60 * 60 * 24 * 14, 'samesite' => 'Strict']);
のように。
うちのご用達Dojo Toolkitでは
require(["dojo/cookie"], function (cookie)
{
cookie("a", value, { expires: 14, SameSite: "strict" });
});
のようにして、SameSiteをStrictに設定できます。
とくになにも考えずにきつめのStrictでいいかと思って設定していたのですが問題発生です。
サイトのURLを入力して直接アクセスしてテストしててCookieの値が利用できたので本番環境に移行したところ、別のサイトから<a hrefリンクで訪れるとそのページで$_COOKIEが見えません。URL直打ちでは問題ないのに、リンクからそのページをたどると問題があるという結果です。
最初はPHPの設定かとも思って調べたのですが該当する報告はなく。ブラウザからのリクエストにCookieが送信していないのかも。とよくよく上記SameSiteの解説ページをみて理解できました。他のWebサイトから開始されたリクエストにおいて、Cookieを送信するかしないかの設定だったんですね。Strictはこの場合、送信しない。ということです。
結局、訪問時に必要なCookieはLax設定にして解決できました。ちゃんと説明書を読めという話題でした。