Django에서 Cookie와 Session 상태 유지 시리즈 11
1, 정의
브라우저 요청 서버는 무상태입니다.무상태는 사용자가 요청할 때 브라우저, 서버가 이전에 이 사용자가 무엇을 했는지 알 수 없으며, 매번 요청은 새로운 요청이다.무상태의 응용 차원은 브라우저와 서버 간의 통신이 HTTP 프로토콜을 준수하기 때문이다.근본 원인은 브라우저와 서버는 Socket 플러그인을 사용하여 통신을 하고 서버가 요청 결과를 브라우저에 되돌려 주면 현재의 Socket 연결을 닫고 서버도 처리 페이지가 끝난 후에 페이지 대상을 삭제합니다.
때때로 사용자가 조회한 상태를 유지해야 한다. 예를 들어 사용자가 로그인했는지, 어떤 상품을 조회했는지 등이다.상태 유지에는 다음과 같은 두 가지 방법이 있습니다.
2,Cookie
정의
쿠키, 때로는 복수 형식의 쿠키를 사용하는데 일부 사이트가 사용자의 신분을 식별하고session 추적을 하기 위해 사용자의 로컬 단말기에 저장된 데이터(일반적으로 암호화됨)를 가리킨다.쿠키는 1993년 3월 망경회사의 전 직원인 Lou Montulli가 발명했다.
쿠키는 서버에서 생성되어 User-Agent(일반적으로 브라우저)에 전송되며, 브라우저는 쿠키의 키/value를 특정한 디렉터리의 텍스트 파일에 저장하고, 다음에 같은 사이트를 요청할 때 이 쿠키를 서버에 발송합니다(브라우저가 쿠키를 사용하도록 설정한 전제).
쿠키 이름과 값은 서버 측에서 스스로 정의할 수 있으며, 서버는 이 사용자가 합법적인 사용자인지, 다시 로그인해야 하는지 등을 알 수 있다.서버는 쿠키에 포함된 정보의 임의성을 이용하여 이러한 정보를 선별하고 자주 유지하여 HTTP 전송 중의 상태를 판단할 수 있다.
Cookies의 가장 전형적인 응용 프로그램은 등록 사용자가 이미 사이트에 로그인했는지 판정하는 것이다. 사용자는 다음에 이 사이트에 들어갈 때 사용자 정보를 보존하여 로그인 수속을 간소화하는지 힌트를 얻을 수 있다. 이것은 모두 Cookies의 기능이다.또 다른 중요한 응용 장소는 쇼핑 카트와 같은 처리이다.사용자는 일정 기간 동안 같은 사이트의 다른 페이지에서 서로 다른 상품을 선택할 수 있으며, 이 정보는 마지막 지불 시 정보를 추출하기 위해 쿠키에 쓰일 수 있다.
쿠키는 브라우저에 저장된 순수한 텍스트 정보로 암호와 같은 민감한 정보를 저장하지 않는 것을 권장합니다. 컴퓨터의 브라우저는 다른 사람이 사용할 수 있기 때문입니다.
쿠키의 특징
전형적인 응용: 사용자 이름을 기억하고 사이트의 광고 전송을 한다.
설명: 광고 푸시 상품은 당신이 타오바오에서 클릭한 상품 종류 등 조건을 바탕으로 선별한 것입니다. 보아하니 이것은 징동에서 타오바오를 방문한 쿠키인 것 같지만 사실은 그렇지 않습니다. 보통 iframe 라벨로 타오바오의 광고 페이지를 징동닷컴 페이지에 끼워 넣기 때문에 타오바오의 쿠키는 징동닷컴에서 읽지 않고 여전히 타오바오닷컴에 맡깁니다.개발자 도구를 통해 요소를 볼 수 있습니다.
3,Session
활용단어참조
민감하고 중요한 정보는 사용자 이름, 잔액, 등급, 인증 코드 등 브라우저에 저장할 수 없으며 서버에 저장하는 것을 권장합니다.서버 쪽에서 상태를 유지하는 방안이 바로 Session입니다.
Session 활성화 및 비활성화
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
저장 방식
항목의 설정을 엽니다.py 파일, SESSION_ 설정ENGINE 항목은 데이터베이스, 캐시, Redis 등에 저장할 수 있는 Session 데이터 저장 방식을 지정합니다.
SESSION_ENGINE='django.contrib.sessions.backends.db'
SESSION_ENGINE='django.contrib.sessions.backends.cache'
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
쿠키에 의존
모든 요청자의 Session은 서버에 저장됩니다. 서버는 요청자와 Session 데이터의 대응 관계를 어떻게 구분합니까?답: Session을 사용하면 쿠키에 sessionid 데이터를 저장합니다. 요청할 때마다 브라우저는 이 데이터를 서버에 보냅니다. 서버는 sessionid를 받은 후에 이 값에 따라 이 요청자의 Session을 찾습니다.
결과: Session을 사용하려면 브라우저가 쿠키를 지원해야 합니다. 그렇지 않으면 Session을 사용할 수 없습니다.
Session을 저장할 때 키는 쿠키의sessionid와 같고 값은 개발자가 설정한 키 값이 정보에 대해base64 인코딩을 하고 만료 시간은 개발자가 설정합니다.
session 대상 및 방법 조작
세션 읽기와 쓰기는 HttpRequest 객체의 Session 속성을 통해 수행됩니다.
request.session['키']=값
request.session.get('키', 기본값)
request.session.clear()
request.session.flush()
del request.session['키']
request.session.set_expiry(value)
Redis 스토리지 세션 사용
세션은 파일, 순수 쿠키,Memcached,Redis 등 방식으로 저장할 수 있으며, 다음은redis 저장소를 사용합니다.
pip install django-redis-sessions
# session redis
SESSION_ENGINE = 'redis_sessions.session' # session redis
SESSION_REDIS_HOST = 'localhost' #redis
SESSION_REDIS_PORT = 6379 #redis
SESSION_REDIS_DB = 1 #
SESSION_REDIS_PASSWORD = '' #
SESSION_REDIS_PREFIX = 'session'
def session_test(request):
request.session['name']='xiaoke'
# name=request.session.get('name')
# del request.session['name']
# request.session.flush()
return HttpResponse(' ')
:ps ajx|grep redis
:sudo service redis start
:sudo service redis stop
:redis-cli
:select 1
:keys *
:get
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.