장고) 모든 방문자에게 세션 부여하기(anonymous user session)

작성자: [관리자] 하얀설표

2025.05.15 16:04 (KST) 작성됨

2025.05.15 16:08 (KST) 수정됨






(05.15) 수정됨.

구글 애널리틱스처럼 방문 통계에 세션 정보를 연결해 세션에서 방문한 페이지를 확인할 수 있게 해볼까 생각을 했었다.

먼제 데이터를 확인하기 위해 데이터베이스의 세션 테이블을 확인해보았는데, 세션이 10개만 있을 뿐이었다.

 

버그?

다행인건 내가 설정을 잘못하거나 코드에 문제가 있던 것은 아니었다.

단지 장고에서는 모든 방문자에게 세션을 부여하지 않을 뿐이었다.

정확히는 세션에 변화가 없는 경우 세션을 따로 만들지 않고 있었다.

 

세션 확인하기

views.py나 middleware에서 다음과 같이 request의 session 정보를 호출할 수 있다.

from django.http import HttpRequest

def view(request: HttpRequest):
  # 세션 변경 여부 확인
  print(f'{request.session.modified=}')
  # 세션 키 확인
  print(f'{request.session.session_key=}')

 

anonymous user에게는 세션이 부여되지 않는다.

사이트 방문자가 로그인하지 않은 경우, session key는 None이다.

세션이 생성되지 않고, 따로 관리하지도 않는 것이다. 만약 익명 방문자에게 세션을 부여하고 싶다면, 세션을 만들어주면 된다.

 

다음과 같은 미들웨어를 만들고, settings.py의 MIDDLEWARE에 생성한 미들웨어를 추가한다면 모든 방문자에게 세션을 부여하게 된다.

from django.http import HttpRequest
from django.utils.deprecation import MiddlewareMixin


class SessionMiddleware(MiddlewareMixin):
    def process_request(self, request: HttpRequest):
        # 세션 부여
        if not request.session.session_key:
            request.session.create()
        # 세션 변경 여부 확인
        print(f'{request.session.modified=}')
        # 세션 키 확인
        print(f'{request.session.session_key=}')
        return

 

SESSION_SAVE_EVERY_REQUEST

관련 내용을 찾아보다가 settings.py에서 "SESSION_SAVE_EVERY_REQUEST = True"를 선언하면 모든 요청(request)에서 세션을 만든다는 내용을 찾아볼 수 있었다.

기본값은 False인데, 테스트해본 결과로는 이것을 설정하더라도 수동으로 세션을 생성해 주어야만 했다.

SESSION_SAVE_EVERY_REQUEST 공식 문서

 

 






추천 (0)


글 목록

댓글을 달 수 없는 게시물입니다.


"분류없음" 카테고리의 #Python, #Django 관련 게시물

분류없음
예제)특정 조합이 리스트 요소에 반드시 포함되어야 한다는 사실만 알 때의 조건식
수정 08.20 | [관리자] 하얀설표
👍 0
#Python, #예제
🗨️ 0
썸네일
분류없음
주식시장 개장일과 휴장일 정보를 간단하게 가져오는 방법(엑셀, 파이썬)
수정 07.20 | [관리자] 하얀설표
👍 0
#Python, #주식
🗨️ 0
분류없음
해결) 장고 bulk_update의 메모리 누수 문제(django orm bluk_update method memory leak)
수정 07.12 | [관리자] 하얀설표
👍 0
#Python, #Django
🗨️ 0
분류없음
거지같은 subQuery와 outerRef
수정 06.29 | [관리자] 하얀설표
👍 0
#Django
🗨️ 0
분류없음
장고) pk 리스트에 등록된 순서대로 오브젝트를 가져오기 예제
작성 06.29 | [관리자] 하얀설표
👍 0
#Django
🗨️ 0
분류없음
해결) django.db.utils.OperationalError: database is locked
수정 06.18 | [관리자] 하얀설표
👍 0
#Python, #에러해결, #Django
🗨️ 0
썸네일
분류없음
장고 예제) 게시판 기능 만들기
수정 06.17 | [관리자] 하얀설표
👍 0
#Django, #Django 예제
🗨️ 0
분류없음
장고 튜토리얼) settings.py 분리하기
수정 06.15 | [관리자] 하얀설표
👍 0
#Django, #Django 튜토리얼
🗨️ 0
썸네일
분류없음
장고 튜토리얼) 패키지 설치와 프로젝트 설치 및 실행 방법
수정 06.15 | [관리자] 하얀설표
👍 0
#Django, #Django 튜토리얼
🗨️ 0
분류없음
장고 튜토리얼) 관리자 계정과 일반 계정 만드는 방법
수정 06.15 | [관리자] 하얀설표
👍 0
#Django, #Django 튜토리얼
🗨️ 0