목차
Cookie
1. 쿠키의 기원
2. 쿠키란 무엇입니까? 쿠키는 구체적으로 서버에서 전송한 키-값 쌍의 집합이며 브라우저는 이러한 키-값 쌍을 자동으로 전달합니다. 다음 번에 서버를 방문하면 서버가 유용한 정보를 추출할 수 있습니다.
쿠키의 작동 원리는 다음과 같습니다. 콘텐츠는 서버에 의해 생성되며, 브라우저는 요청을 받은 후 이를 로컬에 저장하고, 브라우저는 자동으로 쿠키를 가져옵니다. 서버는 쿠키 콘텐츠를 전달하여 이것이 "누구"인지 결정할 수 있습니다.
1. 쿠키 가져오기
매개변수:
Session
Origin 쿠키는 쿠키 자체가 "상태를 유지"해야 하는 필요성을 어느 정도 해결하지만 최대 4096바이트를 지원하며, 쿠키 자체가 클라이언트에 저장되거나 클라이언트가 가로채거나 도난당할 수 있으므로 더 많은 바이트를 지원할 수 있는 새로운 것이 필요하며, 보안성이 더 높은 서버에 저장됩니다. 세션입니다.
1. 세션 프로세스 분석
Django는 기본적으로 Session을 지원하며, 개발자가 사용할 수 있도록 내부적으로 5가지 유형의 Session을 제공합니다.
CBV
백엔드 개발 파이썬 튜토리얼 Python의 쿠키 및 세션에 대한 자세한 설명

Python의 쿠키 및 세션에 대한 자세한 설명

Sep 20, 2018 pm 03:48 PM
python

이 기사는 Python의 쿠키 및 세션에 대한 자세한 설명을 제공합니다. 필요한 친구가 참고할 수 있기를 바랍니다.

1. 쿠키의 기원

HTTP 프로토콜이 Stateless하다는 것은 누구나 알고 있습니다.

상태 비저장은 각 요청의 실행 및 결과가 이전 요청 또는 후속 요청과 직접적인 관련이 없으며 이전 요청의 영향을 직접 받지 않음을 의미합니다. . 후속 요청 응답에 영향을 미칩니다.

인생은 처음 만나는 것과 같다고 표현하는 흥미로운 문장입니다. 서버에게는 모든 요청이 완전히 새로운 것입니다.

상태는 세션에서 클라이언트와 서버에 의해 생성된 데이터로 이해될 수 있으며, 상태 비저장은 이러한 데이터가 유지되지 않음을 의미합니다. 세션에서 생성된 데이터는 저장해야 하는 데이터이며, 이는 "상태를 유지"해야 함을 의미합니다. 그래서 쿠키는 그런 상황에서 태어났습니다.

2. 쿠키란 무엇입니까? 쿠키는 구체적으로 서버에서 전송한 키-값 쌍의 집합이며 브라우저는 이러한 키-값 쌍을 자동으로 전달합니다. 다음 번에 서버를 방문하면 서버가 유용한 정보를 추출할 수 있습니다.

3. 쿠키의 원리

쿠키의 작동 원리는 다음과 같습니다. 콘텐츠는 서버에 의해 생성되며, 브라우저는 요청을 받은 후 이를 로컬에 저장하고, 브라우저는 자동으로 쿠키를 가져옵니다. 서버는 쿠키 콘텐츠를 전달하여 이것이 "누구"인지 결정할 수 있습니다.

Django에서 쿠키 작동

1. 쿠키 가져오기

request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
로그인 후 복사

매개변수:

    default: 기본값
  • salt: 암호화 salt
  • max_age: 백그라운드 제어 만료 시간
  • 2. Cookie
rep = HttpResponse(...)
rep = render(request, ...)

rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐',...)
로그인 후 복사

매개변수:

    key, key
  • value='', value
  • max_age=None, timeout
  • expires=None, timeout(IE에서는 만료가 필요하므로 다음과 같은 경우 설정하세요. 아직 없습니다.)
  • path='/', 쿠키가 적용되는 경로, /는 루트 경로를 나타냅니다. 특수: 루트 경로의 쿠키는 모든 URL 페이지에서 액세스할 수 있습니다
  • domain=None, 쿠키가 유효한 도메인 이름
  • secure=False, https 전송
  • httponly=False는 http 프로토콜을 통해서만 전송될 수 있으며 JavaScript로는 얻을 수 없습니다(절대 아님, 기본 패킷 캡처) 가져오거나 덮어쓸 수 있음)
  • 3. 쿠키 삭제
def logout(request):
    rep = redirect("/login/")
    rep.delete_cookie("user")  # 删除用户浏览器上之前设置的usercookie值
    return rep
로그인 후 복사

Session

Session

Origin 쿠키는 쿠키 자체가 "상태를 유지"해야 하는 필요성을 어느 정도 해결하지만 최대 4096바이트를 지원하며, 쿠키 자체가 클라이언트에 저장되거나 클라이언트가 가로채거나 도난당할 수 있으므로 더 많은 바이트를 지원할 수 있는 새로운 것이 필요하며, 보안성이 더 높은 서버에 저장됩니다. 세션입니다.

문제는 HTTP 프로토콜의 상태 비저장 특성을 기반으로 서버가 방문자가 "누구"인지 전혀 알 수 없다는 것입니다. 그러면 위에서 언급한 쿠키가 연결 역할을 합니다.

각 클라이언트의 쿠키에 고유한 ID를 할당할 수 있으므로 사용자가 방문할 때 서버는 쿠키를 통해 방문자가 "누구"인지 알 수 있습니다. 그런 다음 "계정 비밀번호" 등과 같은 다양한 쿠키 ID를 기반으로 일정 기간 동안 서버에 개인정보를 저장합니다.

요약: 쿠키는 HTTP의 무국적이라는 단점을 보완하여 서버가 오는 사람이 "누구"인지 알 수 있게 해줍니다. 그러나 쿠키는 텍스트 형식으로 로컬에 저장되므로 자체 보안이 취약합니다. 다양한 사용자를 식별하는 쿠키는 이에 따라 세션에 4096바이트를 초과하는 개인 정보 및 텍스트를 저장합니다.

또한 위에서 언급한 쿠키와 세션은 실제로 공통적인 것이며 언어와 프레임워크에 국한되지 않습니다.

Django의 세션 관련 방법

# 获取、设置、删除Session中数据
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在则不设置
del request.session['k1']


# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()

# 会话session的key
request.session.session_key

# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()

# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")

# 删除当前会话的所有Session数据
request.session.delete()
  
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush() 
    这用于确保前面的会话数据不可以再次被用户的浏览器访问
    例如,django.contrib.auth.logout() 函数中就会调用它。

# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。
로그인 후 복사

1. 세션 프로세스 분석

2. Django의 세션 구성

Django는 기본적으로 Session을 지원하며, 개발자가 사용할 수 있도록 내부적으로 5가지 유형의 Session을 제공합니다.

1. 数据库Session
SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

2. 缓存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

3. 文件Session
SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 

4. 缓存+数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎

5. 加密Cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎

其他公用设置项:
SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)

Django中Session相关设置

Django中Session相关设置
로그인 후 복사

Django의 세션 관련 설정

3. CBV 관련 데코레이터

CBV

class LoginView(View):

    def get(self, request):
        """
        处理GET请求
        """
        return render(request, 'login.html')

    def post(self, request):
        """
        处理POST请求 
        """
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        if user == 'alex' and pwd == "alex1234":
            next_url = request.GET.get("next")
            # 生成随机字符串
            # 写浏览器cookie -> session_id: 随机字符串
            # 写到服务端session:
            # {
            #     "随机字符串": {'user':'alex'}
            # }
            request.session['user'] = user
            if next_url:
                return redirect(next_url)
            else:
                return redirect('/index/')
        return render(request, 'login.html')
로그인 후 복사

에서 구현한 로그인 뷰 CBV 뷰에서 위의 check_login 데코레이터를 사용하려면 다음 세 가지 방법이 있습니다.

from django .utils.designators import method_designator

1. CBV 뷰의 get 또는 post 메소드에 추가합니다

from django.utils.decorators import method_decorator


class HomeView(View):

    def dispatch(self, request, *args, **kwargs):
        return super(HomeView, self).dispatch(request, *args, **kwargs)

    def get(self, request):
        return render(request, "home.html")
    
    @method_decorator(check_login)
    def post(self, request):
        print("Home View POST method...")
        return redirect("/index/")
로그인 후 복사

2. 디스패치 메소드가 CBV에서 먼저 실행되기 때문에

from django.utils.decorators import method_decorator


class HomeView(View):

    @method_decorator(check_login)
    def dispatch(self, request, *args, **kwargs):
        return super(HomeView, self).dispatch(request, *args, **kwargs)

    def get(self, request):
        return render(request, "home.html")

    def post(self, request):
        print("Home View POST method...")
        return redirect("/index/")
로그인 후 복사
. 따라서 이런 방식으로 작성하는 것은 get 및 post 메소드 모두에 로그인 확인을 추가하는 것과 같습니다.

3. 뷰 클래스에 직접 추가하되, method_designator는 name 키워드 매개변수를 전달해야 합니다.

get 메소드와 post 메소드 모두 로그인 인증이 필요한 경우 데코레이터를 두 개 작성합니다.

아아아아

위 내용은 Python의 쿠키 및 세션에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

템플릿의 장점과 단점은 무엇입니까? 템플릿의 장점과 단점은 무엇입니까? May 08, 2024 pm 03:51 PM

템플릿의 장점과 단점은 무엇입니까?

DeepSeek Xiaomi를 다운로드하는 방법 DeepSeek Xiaomi를 다운로드하는 방법 Feb 19, 2025 pm 05:27 PM

DeepSeek Xiaomi를 다운로드하는 방법

Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표 Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표 Jul 01, 2024 am 07:22 AM

Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표

단 250달러에 Hugging Face의 기술 디렉터가 Llama 3를 단계별로 미세 조정하는 방법을 알려드립니다. 단 250달러에 Hugging Face의 기술 디렉터가 Llama 3를 단계별로 미세 조정하는 방법을 알려드립니다. May 06, 2024 pm 03:52 PM

단 250달러에 Hugging Face의 기술 디렉터가 Llama 3를 단계별로 미세 조정하는 방법을 알려드립니다.

여러 .NET 오픈 소스 AI 및 LLM 관련 프로젝트 프레임워크 공유 여러 .NET 오픈 소스 AI 및 LLM 관련 프로젝트 프레임워크 공유 May 06, 2024 pm 04:43 PM

여러 .NET 오픈 소스 AI 및 LLM 관련 프로젝트 프레임워크 공유

golang 함수 디버깅 및 분석에 대한 완벽한 가이드 golang 함수 디버깅 및 분석에 대한 완벽한 가이드 May 06, 2024 pm 02:00 PM

golang 함수 디버깅 및 분석에 대한 완벽한 가이드

당신은 그에게 Deepseek에게 어떻게 물어 봐요 당신은 그에게 Deepseek에게 어떻게 물어 봐요 Feb 19, 2025 pm 04:42 PM

당신은 그에게 Deepseek에게 어떻게 물어 봐요

평가 기능을 저장하는 방법 평가 기능을 저장하는 방법 May 07, 2024 am 01:09 AM

평가 기능을 저장하는 방법

See all articles