2020年9月3日木曜日

サーバからCookieを操作使用としているサイトで動作がうまくいかない環境がポツポツと出てきた。Cookie削除時のChromeのSameSite 問題について

現象は

Cookieの削除を行っていたサイトが、突然、削除処理が動作しなくなり、バグを生み出すようになった。
ブラウザ、Chrome、Firefox、SafariなどでSameSite属性が導入されたため。
ただ、現象が発生するのは、Chrome 85だけであり、Firefox 80は発生しない。MacのSafari 13.1.2は、発生しませんでした。

サーバサイドのロジック

サーバサイドでCookieを削除する場合は、有効期限を設定して削除する必要があります。


var cookie = context.Request.Cookies[KEY_COOKIE];
if (cookie != null)
{
	cookie.Expires = DateTime.Now.Date.AddDays(-1d);
	// 設定したパスが受け取れないため、アプリケーションパスをパスに再設定
	cookie.Path = GetApplicationPath(context.Request);
	context.Response.SetCookie(cookie);
}

レスポンスの解析結果

動作している場合のResponse(Chrome)

動作しない場合のResponse(Chrome)

動作しない場合は、SameSite属性が追加されています。

渓谷の内容は、
です。

- エラーメッセージ
This Set-Cookie was blocked because it had the "SameSite=None" attribute but did not hae the "Secure" attribute, which is required in order to use "SameSite=None"

- 日本語
このSet-Cookieは、「SameSite = None」属性があったが、「SameSite = None」を使用するために必要な「Secure」属性を持っていなかったため、ブロックされました。

対応のロジック


none

対応は、サーバへのリクエストのResponseを見て、クライアントでCookieの操作を行い対応しました。

CookieのSameSite属性について

  • Chrome 80からの変更

クッキーの新しい属性 SameSite に対応する方法 | asp.net

  • この方法は、.NET Framework 4.7.2が必要となります。

ChromeでSameSite Cookieを正しく削除する方法(80以降)

  • 削除されない理由、対応方法が記載されいます。