작성
·
24
·
수정됨
답변 2
0
14-06 영상에서 아래와 같이 설정을 한 이유는
SESSION_COOKIE_DOMAIN = env.str("SESSION_COOKIE_DOMAIN", default=None) or None
SESSION_COOKIE_DOMAIN 환경변수가 있으면 읽어서 settings에 반영하기 위함입니다.
그런데, 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 코드 중 일부입니다.
settings.SESSION_COOKIE_DOMAIN 값을 None으로 하드코딩하셨을 때 잘 동작하신다면,
settings.SESSION_COOKIE_DOMAIN 값이 환경변수 값으로 인해 아마 다르게 지정되지 않으셨을까 싶어요.
장고 쉘을 구동하셔서 아래 값을 확인해보셨으면 합니다.
from django.conf import settings
print(repr(settings.SESSION_COOKIE_DOMAIN))
확인해보시고 댓글 부탁드립니다. :-)
0
안녕하세요, 인프런 AI 인턴입니다.
bigseoul님, SESSION_COOKIE_DOMAIN
을 None으로 설정하는 것에 대한 궁금증을 공유해주셨군요. Django에서 SESSION_COOKIE_DOMAIN
설정은 사이트의 세션 쿠키가 발행되는 도메인을 지정하는 역할을 합니다. 기본값은 None
이며, 이는 쿠키가 요청을 생성한 도메인에 특정되어 발행됨을 의미합니다. 만약 이 값이 설정되어 있지 않으면, Django는 쿠키를 요청 도메인에 자동으로 발행하게 됩니다.
SESSION_COOKIE_DOMAIN 설정의 중요성:
- 로컬 개발 환경에서는 대부분 쿠키를 localhost
에 발행하므로, SESSION_COOKIE_DOMAIN
가 None
으로 설정되는 것이 대부분의 경우 예상한 대로 작동하게 만듭니다.
- SESSION_COOKIE_DOMAIN
를 명시적으로 설정할 경우, 쿠키가 특정 서브도메인으로 발행되기 때문에, 로컬 개발 단계에서는 None
으로 두는 게 편리할 때가 많습니다.
설정이 제대로 되지 않거나 값이 다르게 설정되었을 경우 기대한 대로 쿠키가 설정되지 않을 수 있으며, 이로 인해 인증/인가 흐름이나 사용자 세션 관련 문제 등이 발생할 수 있습니다.
관련 참고 내용:
- Django 공식 문서에서는 SESSION_COOKIE_DOMAIN에 대한 자세한 설명을 제공하고 있습니다. 필요에 따라 설정 방법을 연습해 보시는 것도 좋습니다.
다른 사용자들에게도 도움이 될 수 있는 팁을 공유해 주셔서 감사합니다! 추가적으로 궁금한 점이 있으시면, 언제든지 이어서 질문해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
In [1]: from django.conf import settings
...: print(repr(settings.SESSION_COOKIE_DOMAIN))
'.mydj.com'
입니다.
참 난감하네요. 하드코딩 안하면 분명 안됐는데 ㅎ;
이상하게 재부팅하거나 다음날하면 cors에 안생겨서 쿠키가 브라우저에 저장돼서 그런가 싶어 강제로 삭제도 해보고 그랬는데.. 허허 제 잘못이겠죠.