Inflearn brand logo image

인프런 커뮤니티 질문&답변

bigseoul님의 프로필 이미지
bigseoul

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)

05-01 장고 쉘

14-07에서 SESSION_COOKIE_DOMAIN = None 처리 필요.

작성

·

24

·

수정됨

0

14-06수업에서 07 수업할 때 이를 주석처리하도록 의미하셨는지는 모르겠더라구요.

 

07수업에서 해당 내용에 대한 언급이 없어서

계속해서 localhost:3000에서 원하는 결과를 얻지 못했어요.

 

그래서 SESSION_COOKIE_DOMAIN을 None으로 하니까 되더라구요. (당연하게도)

 

다른 분들에게 도움되라구 남겨요~

답변 2

0

이진석님의 프로필 이미지
이진석
지식공유자

14-06 영상에서 아래와 같이 설정을 한 이유는

SESSION_COOKIE_DOMAIN = env.str("SESSION_COOKIE_DOMAIN", default=None) or None

  1. SESSION_COOKIE_DOMAIN 환경변수가 있으면 읽어서 settings에 반영하기 위함입니다.

  2. 그런데, SESSION_COOKIE_DOMAIN 환경변수가 빈 문자열이 들어있는 경우에도 django-environ 라이브러리에서는 값이 있는 것으로 판단하기에 None 값이 들어가는 것이 아니라, 빈 문자열로서 settings.SESSION_COOKIE_DOMAIN = "" 값이 됩니다. 빈 문자열인 경우에도 None 값으로 변환하기 위해 끝에 or None 코드를 추가하나 것입니다. "" or None 의 평가는 None이 되거든요.

settings.SESSION_COOKIE_DOMAIN 설정에는 반드시 None 이거나 지정 도메인이 들어가야 합니다. 그렇지 않다면 csrf 체크에서 엉뚱하게 동작합니다.

아래는 django/middleware/csrf.py 코드 중 일부입니다.

image.png

https://github.com/django/django/blob/a3b1107a4955bdd994908efb4c6e1d03c281e69f/django/middleware/csrf.py#L322

settings.SESSION_COOKIE_DOMAIN 값을 None으로 하드코딩하셨을 때 잘 동작하신다면,
settings.SESSION_COOKIE_DOMAIN 값이 환경변수 값으로 인해 아마 다르게 지정되지 않으셨을까 싶어요.

장고 쉘을 구동하셔서 아래 값을 확인해보셨으면 합니다.

from django.conf import settings
print(repr(settings.SESSION_COOKIE_DOMAIN))

확인해보시고 댓글 부탁드립니다. :-)

bigseoul님의 프로필 이미지
bigseoul
질문자

In [1]: from django.conf import settings

...: print(repr(settings.SESSION_COOKIE_DOMAIN))

'.mydj.com'
입니다.


참 난감하네요. 하드코딩 안하면 분명 안됐는데 ㅎ;

이상하게 재부팅하거나 다음날하면 cors에 안생겨서 쿠키가 브라우저에 저장돼서 그런가 싶어 강제로 삭제도 해보고 그랬는데.. 허허 제 잘못이겠죠.

이진석님의 프로필 이미지
이진석
지식공유자

환경변수 지정됨 여부에 따라, 다르게 동작했을 확률이 높습니다. :-)

0

안녕하세요, 인프런 AI 인턴입니다.

bigseoul님, SESSION_COOKIE_DOMAIN을 None으로 설정하는 것에 대한 궁금증을 공유해주셨군요. Django에서 SESSION_COOKIE_DOMAIN 설정은 사이트의 세션 쿠키가 발행되는 도메인을 지정하는 역할을 합니다. 기본값은 None이며, 이는 쿠키가 요청을 생성한 도메인에 특정되어 발행됨을 의미합니다. 만약 이 값이 설정되어 있지 않으면, Django는 쿠키를 요청 도메인에 자동으로 발행하게 됩니다.

SESSION_COOKIE_DOMAIN 설정의 중요성:
- 로컬 개발 환경에서는 대부분 쿠키를 localhost에 발행하므로, SESSION_COOKIE_DOMAINNone으로 설정되는 것이 대부분의 경우 예상한 대로 작동하게 만듭니다.
- SESSION_COOKIE_DOMAIN를 명시적으로 설정할 경우, 쿠키가 특정 서브도메인으로 발행되기 때문에, 로컬 개발 단계에서는 None으로 두는 게 편리할 때가 많습니다.

설정이 제대로 되지 않거나 값이 다르게 설정되었을 경우 기대한 대로 쿠키가 설정되지 않을 수 있으며, 이로 인해 인증/인가 흐름이나 사용자 세션 관련 문제 등이 발생할 수 있습니다.

관련 참고 내용:
- Django 공식 문서에서는 SESSION_COOKIE_DOMAIN에 대한 자세한 설명을 제공하고 있습니다. 필요에 따라 설정 방법을 연습해 보시는 것도 좋습니다.

다른 사용자들에게도 도움이 될 수 있는 팁을 공유해 주셔서 감사합니다! 추가적으로 궁금한 점이 있으시면, 언제든지 이어서 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

bigseoul님의 프로필 이미지
bigseoul
질문자

역시나 인공지능이었군요 ㅋㅎ

이런 내용은 학습자가 알아서 찾을 듯 하네요.

bigseoul님의 프로필 이미지
bigseoul

작성한 질문수

질문하기