Django 쿠키 조작 실현

머리말
쿠키:사이트 에서 http 요청 은 무상 태 입 니 다.즉,서버 와 처음 연결 하고 로그 인 에 성공 한 후에 도 두 번 째 요청 서버 는 현재 요청 이 어떤 사용자 인지 알 수 없다 는 것 이다.cookie 의 등장 은 바로 이 문 제 를 해결 하기 위해 서 입 니 다.첫 번 째 로그 인 후 서버 는 일부 데 이 터 를 (cookie) 브 라 우 저 에 게 되 돌려 주 고 브 라 우 저 는 로 컬 에 저장 합 니 다.이 사용자 가 두 번 째 요청 을 보 낼 때 마지막 으로 요청 한 cookie 수 를 자동 으로 서버 에 휴대 합 니 다.서버 는 브 라 우 저가 가지 고 있 는 데 이 터 를 통 해 현재 사용자 가 누구 인지 판단 할 수 있 습 니 다.cookie 에 저 장 된 데 이 터 는 양 이 제한 되 어 있 고 브 라 우 저 마다 저장 크기 가 다 르 지만 보통 4KB 를 초과 하지 않 습 니 다.따라서 cookie 을 사용 하면 소량의 데이터 만 저장 할 수 있다.
쿠키 의 특징:
    (1)키 값 으로 저장
    (2)브 라 우 저 를 통 해 한 사 이 트 를 방문 할 때 브 라 우 저 에 저 장 된 사이트 와 관련 된 모든 쿠키 정 보 를 해당 사이트 의 서버 에 보 냅 니 다.
    ⑶ 쿠키 는 도 메 인 이름 을 기반 으로 안전 합 니 다.
    (4)쿠키 는 만 료 된 시간 이 있 기 때문에 지정 하지 않 으 면 브 라 우 저 를 기본적으로 닫 으 면 쿠키 가 만 료 된다.
쿠키 의 도 메 인 이름 을 뛰 어 넘 을 수 없 음
1.많은 사이트 에서 쿠키 를 사용 합 니 다.예 를 들 어 구 글 은 클 라 이언 트 에 게 쿠키 를,바 이 두 는 클 라 이언 트 에 게 쿠키 를 수여한다.그러면 브 라 우 저가 Google 을 방문 해도 Baidu 에서 발급 한 Cookie 를 가지 고 있 지 않 을까요?아니면 Google 에서 Baidu 가 주 는 Cookie 를 수정 할 수 있 을까요?
2.답 은 부정 적 이다.Cookie 는 도 메 인 이름 을 뛰 어 넘 을 수 없습니다.쿠키 규범 에 따 르 면 브 라 우 저 는 Google 을 방문 할 때 Baidu 의 쿠키 를 휴대 하지 않 고 Google 의 쿠키 만 휴대 합 니 다.Google 도 Baidu 쿠키 대신 Google 쿠키 만 사용 할 수 있 습 니 다.
3.쿠키 는 클 라 이언 트 에서 브 라 우 저 에서 관리 합 니 다.브 라 우 저 는 Google 이 Baidu 의 Cookie 대신 Google 의 Cookie 만 사용 할 수 있 도록 보장 하여 사용자 의 프라이버시 를 보장 합 니 다.브 라 우 저가 한 사이트 가 다른 사이트 쿠키 를 조작 할 수 있 는 지 를 판단 하 는 근 거 는 도 메 인 이름 이다.Google 은 Baidu 도 메 인 이름과 다 르 기 때문에 Baidu 의 Cookie 를 사용 할 수 없습니다.
4.주의해 야 할 것 은 사이트 images.google.com 과 사이트 www.google.com 은 Google 에 속 하지만 도 메 인 이름 이 다 르 기 때문에 서로 쿠키 를 조작 할 수 없습니다.
쿠키 설정cookie 을 설정 하 는 것 은 브 라 우 저 에 값 을 설정 하 는 것 입 니 다.따라서 우 리 는 response 의 대상 을 통 해 설정 해 야 한다.cookie 을 설정 하면 response.set_cookie 을 통 해 설정 할 수 있다.이 방법의 관련 매개 변 수 는 다음 과 같다.
  • key:이 쿠키 의 key.
  • value:이 쿠키 의 value.
  • max_age:가장 긴 생명주기.단 위 는 초.
  • expires:만 료 시간.maxage 는 유사 합 니 다.다만 이 매개 변 수 는 구체 적 인 날 짜 를 전달 해 야 합 니 다.예 를 들 어 datetime 이나 날짜 형식 에 맞 는 문자열 입 니 다.expires 와 max 를 동시에 설정 하면age,그러면 expires 의 값 을 만 료 시간 으로 사용 합 니 다.
  • path:도 메 인 이름 아래 어느 경로 가 유효 합 니까?기본 값 은 도 메 인 이름 의 모든 경로 에 유효 합 니 다.
  • domain:어느 도 메 인 이름 에 유효 합 니까?기본 값 은 주 도 메 인 이름 에 유효 합 니 다.특정한 도 메 인 이름 에 만 유효 하 다 면 이 속성 을 설정 할 수 있 습 니 다.
  • secure:안전 한 지,True 로 설정 하면 https 프로 토 콜 에서 만 사용 할 수 있 습 니 다.
  • httponly:기본 값 은 False 입 니 다.True 라면 클 라 이언 트 에서 자바 스 크 립 트 를 통 해 조작 할 수 없습니다.
  • 쿠키 가 져 오기
    브 라 우 저가 보 낸 cookie 정 보 를 가 져 옵 니 다.request.COOKIES 을 통 해 오 거나이 대상 은 사전 형식 입 니 다.예 를 들 어 모든 쿠키 를 가 져 오 면 예제 코드 는 다음 과 같 습 니 다.
    
    cookies = request.COOKIES
    for cookie_key,cookie_value in cookies.items():
       print(cookie_key,cookie_value)
    
    쿠키 삭제delete_cookie 을 통 해 cookie 을 삭제 할 수 있 습 니 다.실제로 cookie 을 삭제 하 는 것 은 지정 한 cookie 의 값 을 빈 문자열 로 설정 한 다음 에 그의 만 료 시간 을 0 으로 설정 하 는 것 이다.즉,브 라 우 저 를 닫 으 면 만 료 되 는 것 이다.
    실전 사례
    저 희 는 먼저 uris.py 에 세 가지 경 로 를 기록 합 니 다.하 나 는 쿠키 경 로 를 설정 하고 하 나 는 쿠키 경 로 를 얻 으 며 하 나 는 쿠키 경 로 를 삭제 합 니 다.코드 는 다음 과 같 습 니 다.
    
    #      
    urlpatterns = [
        path('cookie_app/', include('cookie_app.urls')),
    ]
    
    # cookie_app.urls.py
    urlpatterns = [
        path('set_cookie/', views.set_cookie),
        path('get_cookie/', views.get_cookie),
        path('delete_cookie/', views.delete_cookie),
    ]
    
    이어서 우 리 는 views.py 보기에 대응 하 는 보 기 를 기록 합 니 다.코드 는 다음 과 같 습 니 다.
    
    def set_cookie(request):
        """  cookie"""
        response = HttpResponse('success')
        response.set_cookie('username', 'jkc', max_age=180)  #   cookie,     180 
        return response
    
    
    def get_cookie(request):
        """  cookie"""
        cookies = request.COOKIES
        return HttpResponse(cookies.items())
    
    
    def delete_cookie(request):
        """  cookie"""
        response = HttpResponse('  cookie  ')
        response.delete_cookie('username')
        return response
    다음은 url 주소 127.0.0.1/cookie_app/set_cookie/ 을 방문 하여 F12 을 열 면 네트워크 요청 중의 response headerset-cookie 필드 가 있 음 을 볼 수 있 습 니 다.

    저희 도 사이트 주소 의 을 열 수 있 습 니 다.아래 그림 입 니 다.

    그리고 팝 업 아래 창 이 나타 납 니 다.cookie 을 누 르 십시오.

    저 희 는 방금 설정 한 쿠키 username 을 볼 수 있 고 기한 이 지난 시간 은 이전에 설정 한 3 분 입 니 다.


    그 다음 에 저 희 는 http://127.0.0.1:8000/cookie_app/get_cookie/ 을 방문 하여 쿠키 를 얻 습 니 다.브 라 우 저 페이지 는 ('username', 'jkc') 으로 돌아 갑 니 다.저 희 는 F12 를 열 어 요청 헤드 의 정 보 를 볼 수 있 습 니 다.요청 헤드 에 cookie 정 보 를 가지 고 있 는 것 을 발견 할 수 있 습 니 다.다음 그림 과 같 습 니 다.

    마지막 으로 저 희 는 http://127.0.0.1:8000/cookie_app/delete_cookie/ 을 방문 하여 쿠키 를 삭제 하고 브 라 우 저 페이지 는 cookie 으로 돌아 갑 니 다.이 어 저 희 는 사이트 의 cookie 정 보 를 조회 하면 username 의 값 이 비어 있 는 것 을 발견 할 수 있 습 니 다.다음 그림 과 같 습 니 다.

    왜 비어 있 습 니까?우 리 는 delete_cookie 방법의 소스 코드 를 볼 수 있 는데,아래 와 같다.
    
    def delete_cookie(self, key, path='/', domain=None):
        # Most browsers ignore the Set-Cookie header if the cookie name starts
        # with __Host- or __Secure- and the cookie doesn't use the secure flag.
        secure = key.startswith(('__Secure-', '__Host-'))
        self.set_cookie(
            key, max_age=0, path=path, domain=domain, secure=secure,
            expires='Thu, 01 Jan 1970 00:00:00 GMT',
        )
    
    이 를 통 해 알 수 있 듯 이 그 안에 set_cookie 방법 을 호출 한 다음 에 value 에 값 을 부여 하지 않 았 습 니 다.기본 값 은 '' 빈 문자열 입 니 다.그 다음 에 max_age 을 0 으로 설정 하면 기한 이 지난 시간 이 바로 지금 입 니 다.
    Django 가 쿠키 를 조작 하 는 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Django 가 쿠키 를 조작 하 는 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 사랑 해 주세요!

    좋은 웹페이지 즐겨찾기