4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DjangoでcookieのSame-Site属性設定

Last updated at Posted at 2020-03-13

#背景

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を閉じる習慣がない為、自分の環境ではこの問題になかなか気付かずに大変でしたが、修正自体は割と簡単なもので良かったです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?