π session μ΄λ ν΄λΌμ΄μΈνΈλ³ μ 보λ₯Ό λΈλΌμ°μ κ° μλ μΉμλ²μ μ μ₯νλ κ²μ΄λ€.
ν΄λΌμ΄μΈνΈμ μ 보λ₯Ό μΉλΈλΌμ°μ μ μ μ₯νλ κ²μ cookieλΌ νλ€.
django sessionμ μΏ ν€μ session id λ₯Ό μ μ₯νλ€.
ν΄λΌμ΄μΈνΈμ μΉμλ²μ μ°κ²°μ±μ νμΈν ν session idλ₯Ό ν΅ν΄ μ€νλλ€.
session id λ λΈλΌμ°μ λ₯Ό λ«μΌλ©΄ μ¬λΌμ§λ€.
- μ μ κ° μΉμ¬μ΄νΈ μ μ
- μΉμ¬μ΄νΈμ μλ²κ° μ μ μκ² session id λΆμ¬
- μ μ μ λΈλΌμ°μ κ° session id cookieμ 보쑴
- ν΅μ ν λ session idλ₯Ό μΉμλ²μ μ μ‘
- request μ session idκ° λ€μ΄κ° μμ
π cookieλ μ μν μΉμ¬μ΄νΈμ μν΄ μμ±λλ©° μ¬μ΄νΈμμ cookieλ₯Ό μ¬μ©ν΄ μ μ μ λ‘κ·ΈμΈ μνλ₯Ό μ μ§νκ±°λ μ μ μ μ¬μ΄νΈ μ΄μ© μ€μ μ κΈ°μ΅μν¨λ€.
μΉμλ²μμ μΉλΈλΌμ°μ λ‘ http ν€λλ₯Ό μ΄μ©ν΄μ μ 보λ₯Ό 보λ΄κ³ μΏ ν€λ μλ²μ μ μν λλ§λ€ μλ μ μ‘λλ€.
μΏ ν€λ 곡μ λμ§ μμ λ€λ₯Έ μΉμ¬μ΄νΈλ λ€λ₯Έ μΉμ¬μ΄νΈμμ λ§λ μΏ ν€λ₯Ό λ³Ό μ μλ€.
π django sessionμ λ¨Όμ μ΄ν΄ν΄μΌ νλ€.
django viewμμ ν μ€νΈλ‘ μΌλ¨ μλ μ½λλ₯Ό μ°μ΄λ³΄μλ€.print(request.session) print(request.session.session_key)
request session μ μ΄λ ν κ°μ²΄κ° μ€κ³
μ²μ μ μνλ λΈλΌμ°μ μ session keyλ μκΈ° λλ¬Έμ none κ°μ΄ μ€κ² λλ€.
μ½λclass ArticleDetailView(APIView): permission_classes = [permissions.IsAuthenticatedOrReadOnly] def get(self, request, article_id): article = get_object_or_404(Article, id=article_id) # λΉμΌλ λ°€ 12μμ μΏ ν€ μ΄κΈ°ν tomorrow = datetime.replace(datetime.now(), hour=23, minute=59, second=0) expires = datetime.strftime(tomorrow, "%a, %d-%b-%Y %H:%M:%S GMT") serializer = ArticleDetailSerializer(article) response = Response(serializer.data, status=status.HTTP_200_OK) print(request.COOKIES) # μΏ ν€ μ½κΈ° & μμ± if request.COOKIES.get('hit'): cookies = request.COOKIES.get('hit') cookies_list = cookies.split('|') if str(article_id) not in cookies_list: response.set_cookie('hit', cookies+f'|{article_id}', expires=expires) # μΏ ν€ μμ± with transaction.atomic(): # λͺ¨λΈ νλμΈ viewsμ 1 μΆκ° article.views += 1 article.save() else: response.set_cookie('hit', article_id, expires=expires) article.views += 1 article.save() serializer = ArticleDetailSerializer(article) response = Response(serializer.data, status=status.HTTP_200_OK) return response
μΏ ν€ λ§λ€κΈ°
set_cookie(name, value, max_age)
name : μΏ ν€μ΄λ¦
value : κ°
max_age : expiresμΏ ν€ λ°μ΄ν° μ½κΈ°
request.COOKIES.get(cookie name)