#背景
2020年2月17日から、Chrome80でSame-Site属性のデフォルト値がNoneからLaxに変更されるということを知らずに生きてきたら、運用サイトで問題が起きて焦りました。
そこで、DjangoでのcookieにSame-Site属性を設定する方法を探っていたところ、Django2と3でも設定の違いがあったので、メモとして残しておきたいと思います。
#Django2の場合
###パッケージ使用の場合
簡単なのは、パッケージを使用する方法です。
自分のところはまだDjango2を使用していて、django-cookies-samesite
というパッケージが便利そうだったので、これを使用してSame-Site属性を設定するようにしました。
https://pypi.org/project/django-cookies-samesite/
設定方法は簡単で、MIDDLEWARE_CLASSESへの追加と、設定ファイルに変数を定義するだけです。
MIDDLEWARE_CLASSES = (
'django_cookies_samesite.middleware.CookiesSameSite',
...
)
SESSION_COOKIE_SAMESITE = 'None'
また、cookie名の設定や強制的に全cookieのSAMESITEを書き換えるオプションも付いているので、便利です。
#自分でsamesiteを追加する
自分で追加する場合は、このような形になります。これも簡単ですが、色々なところでcookieを設定している場合には少し面倒かなというところがあります。
response = HttpResponse('OK')
response.cookies[key]['samesite'] = 'None'
#Django3の場合
Django3では既存のset_cookieが改善されて、samesiteを渡すことが出来るようになりました。これで大分すっきりしましたね。
response = HttpResponse('OK')
response.set_cookie(key, value, secure=True, samesite='None')
ただし、Django2のようにMiddlewareでの処理ではない為、一つ一つ設定していかないと行けない点は面倒かもしれません。
#終わり
あまりchromeを閉じる習慣がない為、自分の環境ではこの問題になかなか気付かずに大変でしたが、修正自体は割と簡単なもので良かったです。