Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python CGI 프로그래밍에서 쿠키를 조회하는 방법 완벽 가이드

쿠키 조회(Retrieving Cookies)

설정된 쿠키를 모두 가져오는 작업은 매우 간단합니다. 쿠키는 CGI 환경 변수인 HTTP_COOKIE에 저장되며, 다음과 같은 형태로 값이 담겨 있습니다.

key1=value1;key2=value2;key3=value3....

즉, 여러 개의 쿠키가 세미콜론(;)으로 구분되어 하나의 문자열로 전달됩니다. 따라서 이 문자열을 적절히 분리하면 원하는 쿠키 값을 얻을 수 있습니다.

쿠키 조회 예제

다음은 HTTP_COOKIE 환경 변수에서 쿠키를 읽어 UserIDPassword 값을 추출하는 예제입니다.

#!/usr/bin/python3
# CGI 처리를 위한 모듈 임포트
from os import environ
import cgi, cgitb
cgitb.enable()

user_id = None
password = None

# HTTP_COOKIE 환경 변수가 존재하는지 확인
if 'HTTP_COOKIE' in environ:
    # 세미콜론(;)으로 구분된 각 쿠키를 순회
    for cookie in map(str.strip, environ['HTTP_COOKIE'].split(';')):
        # 등호(=)를 기준으로 키와 값을 분리
        (key, value) = cookie.split('=', 1)
        if key == "UserID":
            user_id = value
        if key == "Password":
            password = value

print("User ID  = %s" % user_id)
print("Password = %s" % password)

실행 결과

앞선 스크립트에서 설정한 쿠키가 있다면, 위 코드를 실행했을 때 다음과 같은 결과가 출력됩니다.

User ID = XYZ
Password = XYZ123

코드 동작 원리

이 코드의 핵심 로직은 다음과 같습니다.

1. 환경 변수 확인: environ 딕셔너리에 HTTP_COOKIE 키가 있는지 먼저 검사합니다. 쿠키가 없는 요청에서 오류가 발생하지 않도록 하는 안전장치입니다.

2. 쿠키 분리: split(';')으로 전체 쿠키 문자열을 개별 쿠키 단위로 나눈 뒤, map(str.strip, ...)으로 각 조각의 불필요한 공백을 제거합니다.

3. 키와 값 분리: 각 쿠키를 split('=', 1)으로 분리하여 키와 값을 얻습니다. 두 번째 인자 1을 지정하면 값 자체에 등호가 포함되어 있어도 첫 번째 등호만 기준으로 잘라내므로 더 안전합니다.

4. 필요한 값 추출: 키 이름이 UserID 또는 Password와 일치하는 경우 해당 값을 변수에 저장한 후 출력합니다.

참고 사항

예전 Python 2 기반 자료에서는 print "..." 문법과 environ.has_key(), string.split() 함수가 사용되었지만, 현재 표준인 Python 3에서는 위 예제처럼 print() 함수, '키' in environ 방식, 그리고 문자열의 .split() 메서드를 사용해야 합니다. 또한 실제 서비스 환경에서는 비밀번호와 같은 민감한 정보를 평문 쿠키에 저장하지 않는 것이 좋으며, 세션 ID 방식과 HTTPS 암호화를 함께 사용하는 것이 안전합니다.