로그인 인증 쿠키 및 세션 실현

이러한 클라이언트의 쿠키 정보와 협력 할 필요가 저장되며, 로그인시 달성하기 위해 세션 서버에 저장되어있는 로그인 기능을 같은 대답 기법. 사용자가 액세스 사이트를 특별 토큰을 보유 할 때 사용자의 쿠키 정보에 저장, 특히 특별한 토큰 정보 사이트의 세션 여부를 확인하기 위해 데이터베이스에 쿠키에서이 특별한 토큰을 얻을 것이다 이 정보는 인증이 성공하면 검증은 사용자가 로그인 그래서 프롬프트되지하라는 메시지가 실패하면, 당신은 클라이언트에 대한 사용자의 정보 등을 넣을 수 있습니다, 토큰 대응하고있다.

HTTP 쿠키 인해 물을 수 없습니다 http 프로토콜하지만, 현실, 계약의 범위에 속하지 않는, 그러나 우리는 "보류"필요하기 때문에 쿠키가 이러한 시나리오에서 태어났다.

작품 쿠키입니다 : 서버에서 생성 된 내용은, 브라우저가 로컬로 저장 요청 수신, 브라우저 방문, 브라우저가 자동으로 쿠키를 가져올 때, 그래서 서버가 쿠키의 내용으로 판단 할 수 있음 "입니다 "가.

쿠키는 어느 정도 해결되지만,에 "보류"요구하지만, 쿠키 자체는 4096 바이트까지 지원하며, 클라이언트 자체에 저장되어있는 쿠키에 의한, 차단 또는 도난, 따라서 뭔가가 필요, 그것을 새가 될 수 있습니다 더 바이트를 지원하며, 자신이 서버에 저장, 높은 보안이 있습니다. 즉 세션입니다.

무 상태의 HTTP 프로토콜의 특성에 기반 문제, 서버가 방문자 모르는 "사람." 그리고 상기 쿠키는 다리의 역할을 할 것이다.

그 사용자가 쿠키를 통해 액세스 할 수 있도록 우리는 각 클라이언트에 할당 된 고유 한 ID 쿠키를 제공 할 수 있습니다, 서버는 사람들에게 알고있다 "." 그럼 우리는 ID의 다른 등등 "계정 암호"와 같은 쿠키, 몇 시간 동안 서버에 저장된 개인 정보를 기반으로.

요약하면 : 쿠키, HTTP 상태 비의 부족을 만회 ""사람들에게 서버 노하우를 수 있도록 있지만 텍스트의 형태로 쿠키가 로컬로 저장, 그들의 보안이 좋지 우리는 쿠키에 의해 서로 다른 사용자를 식별 할 수 있도록, 세션에서 4096 바이트보다 개인 정보와 텍스트를 저장에 대응.

또한, 위에서 언급 한 쿠키와 세션의 공통점은 언어와 프레임 워크에 한정되지 않고, 무언가가 실제로

####

HTTP 프로토콜은 무 상태입니다. 따라서, 다른 방법의 도움이 원격 서버와 클라이언트가 완료 통신 있었다 무엇을하기 전에 알 수없는 경우. 쿠키 중 하나입니다 "다른 방법." 쿠키 일반적인 응용 프로그램 시나리오는 사이트에 로그인 한 사용자를 기록하는 데 사용됩니다.

사용자가 성공적으로 로그인 한 후, 다음 서버는 (일반적으로 암호화) 쿠키 파일을 전송합니다. 클라이언트 (일반적으로 웹 브라우저)는 수신 된 파일 쿠키를 저장합니다. 서버에 클라이언트 커넥트가 서버에 쿠키 파일을 전송하는 다음 번에, 서버는 그 의미를 확인 (다시 피하기 로그) 기록 복원.

#####

1.1 설명
대답 기술적 브라우저 
자체가 브라우저에 의해 생성 된 쿠키는 브라우저에 응답에 의해 작성된 쿠키, 다음 방문은 브라우저 쿠키는 다른 규칙에 따라 이월됩니다

#####

1.2 쿠키 방법
设置 : response.set_cookie (키 값 MAX_AGE = 없음, exprise = 없음)

가져옵니다 : request.GET.get (키)

删除 : request.delete_cookie (키)

참고 : 쿠키가 없습니다 크로스 브라우저

매개 변수 정의 :

MAX_AGE 및 exprise 시간 :

MAX_AGE : 초, 쿠키 만료 시간을 지정하는 정수

exprise : 만료 시간을 지정하면, 또한 날짜 또는 timedelta을 지원 정수, 특정 날짜와 시간을 지정할 수 있습니다

설정 10 일 후에 만료 :

exprise = datetime.datetime.now () + timedelta (일 = 10) 10 일 만료

사용 기간 제한 없음 :

없음 exprise 세트는 만료되지 않습니다 것을 나타냅니다

####

2. 세션

#####

2.1 설명
쿠키에 따라 서버 기술 세션,

#####

2.2 공개 세션 설정

1) 사용 가능 장고 SESSION

대신에 다음과 같은 설정을 수정

INSTALLED_APPS : 
'django.contrib.sessions'

미들웨어 :
'django.contrib.sessions.middleware.SessionMiddleware'

각 객체는, 세션 HttpResponse에 속성이 사전 같은 객체이다

#####

2.3 공통 운영
request.session [ '사용자'] = 사용자 설정 데이터

request.session.get (키 기본값 = 없음)에 따른 세션 키의 값을 취득하지

request.session.flush () 현재의 세션 데이터를 삭제하고 세션 쿠키를 삭제 django.contrib.auth.logout () 함수를 호출된다.

request.session.session_key 원 큰 열은  로그인 인증, 쿠키 및 세션 실현 세션 id 값을 취

request.session.delete (request.session.session_key) 현재 세션의 모든 사용자 데이터를 삭제하기

델의 request.session [ '키'] 세션 키 값을 삭제

request.session.set_expiry (값)
의 값이 정수인 경우, 세션 초 몇개 후에 만료
값 datatime 또는 timedelta 인 경우, 세션이 시간 이후에 만료된다.
값이 0 인 경우, 사용자는 브라우저 세션이 실패 닫습니다.


데이터베이스에 저장된 데이터베이스 64을 사용하여 인코딩 될 수있다

3. 로그인 인증 세션 + 쿠키 달성

로그인 인증 방법 뷰 만들기 1
데프  (요청) : 경우 request.method == 'GET' : 반환 렌더링 (요청 'login.html을' ) 의 경우 request.method == 'POST' :		사용자 이름 = request.POST.get ( '이름' )		암호 = request.POST.get ( '암호' ) # 2校验数据完整性 		플래그 = 전체 ([아이디, 비밀번호])









IF 되지 않음 에 신고 :
MSG는 = '사용자 이름과 암호를 비워 둘 수 없습니다' 리턴 (가) 렌더링 (요청, '이 login.html' , { 'MSG' : MSG는}) # 3. 확인 사용자 등록이 사용자 = User.objects.filter (사용자 이름 = 사용자 이름) 좁은 방 () IF 하지 사용자 : MSG = '계정 등록, 등록되지 않은' 돌아 렌더링 (요청을 '을 login.html' , { 'MSG' : MSG}) # 4. 암호 IF 사용자. 암호 = 암호 :! MSG는 = '비밀번호가 잘못되었습니다' 돌아 렌더링 (요청, '이 login.html' , { 'MSG' : MSG}) + 세션 # 1. 쿠키를













세트 # 쿠키 세션 ID 값 django_session가 # 1에 나타난 값을 저장된 세션 ID request.session한다 [ 'USER_ID' = user.id의 복귀 HttpResponseRedirect를 (후진 ( '사용자 : 인덱스' ))



적절한 장식을 생성합니다
DEF  login_required (FUNC) : DEF의 check_login (요청) : 은 try : 세션 ID # 확인 쿠키 값이 존재 해당 기록 정보 # django_session 인증 서버 테이블이 있으면 현재 값 설정을 취득한 경우 #의 USER_ID 			request.session을 [만든다 'USER_ID' ] 를 제외하고 예외 AS E : 리턴 HttpResponseRedirect를 (리버스 ( '사용자 : 로그인' )) 반환 FUNC (요청)










반환 check_login
3. 취소를 달성하기

DEF 아웃 (요청) : 만약 request.method == 'GET' : request.session [ 'USER_ID' ]



반환 HttpResponse에를 ( '로그 아웃 성공' )

추천

출처www.cnblogs.com/lijianming180/p/12037965.html