Django의 cookies 및 session
14414 단어 django
Session은 쿠키에 의존합니다. 만약 브라우저가 쿠키를 저장할 수 없다면 session은 효력을 상실합니다.브라우저의 쿠키 값이session에서 비교되어야 하기 때문입니다.세션 상태는 서버에서 사용자의 세션 상태를 저장하는 데 사용됩니다.
Cookie
1. 쿠키를 획득:
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
:
default:
salt:
max_age:
2, 쿠키 설정:
rep = HttpResponse(...) rep = render(request, ...)
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt=' ',...)
:
key,
value='',
max_age=None,
expires=None, (IE requires expires, so set it if hasn't been already.)
path='/', Cookie ,/ , : cookie url
domain=None, Cookie
secure=False, https
httponly=False http , JavaScript ( , )
쿠키는 클라이언트의 컴퓨터에 저장되기 때문에 자바스크립트와 jquery에서도 쿠키를 조작할 수 있습니다.
<script src='/static/js/jquery.cookie.js'>script>
$.cookie("list_pager_num", 30,{ path: '/' });
Session
Django에서는 기본적으로 Session이 지원되며, 개발자가 사용할 수 있는 5가지 유형의 Session이 내장되어 있습니다.
( )
+
cookie
1. 데이터베이스 세션
Django Session, Session , :django_session 。
a. settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # ( )
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, ( )
b.
def index(request):
# 、 、 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
request.session.session_key
# Session
request.session.clear_expired()
# session
request.session.exists("session_key")
# Session
request.session.delete("session_key")
request.session.set_expiry(value)
* value ,session 。
* value datatime timedelta,session 。
* value 0, session 。
* value None,session session 。
2, 캐시 세션
a. settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' #
SESSION_CACHE_ALIAS = 'default' # ( , memcache),
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,
b.
3. 파일 세션
a. settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.file' #
SESSION_FILE_PATH = None # , None, tempfile tempfile.gettempdir() # :/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
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,
b.
4. 캐시 + 데이터베이스 세션
,
a. settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' #
b.
5. 암호화 쿠키 세션
a. settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' #
b.
확장:Session 사용자 인증
def login(func):
def wrap(request, *args, **kwargs):
# ,
if request.path == '/test/':
return redirect('http://www.baidu.com')
return func(request, *args, **kwargs)
return wrap
예:
from django.shortcuts import render,redirect
# Create your views here.
import datetime
def login(request):
print("COOKIES",request.COOKIES) # cookies ,
print("SESSION",request.session) #session
if request.method=="POST":
name=request.POST.get("user")
pwd=request.POST.get("pwd")
if name=="yuan" and pwd=="123":
# ret=redirect("/index/")
# ret cookie , max_age,expires,
# ret.set_cookie("username",{"11":"22"},max_age=10,expires=datetime.datetime.utcnow()+datetime.timedelta(days=3))
# return ret
# COOKIE SESSION
# session , ,
request.session["is_login"]=True # session
request.session["user"]=name
return redirect("/index/")
return render(request,"login.html")
def index(request):
if request.COOKIES.get("username",None): # None
name = request.COOKIES.get("username",None)
return render(request, "index.html", locals())
# session , makemigrations
if request.session.get("is_login",None):
name=request.session.get("user",None)
return render(request,"index.html",locals())
else:
return redirect("/login/")
##session
request.session.get("user",None)
#
request.session["user"]=name
#
del request.session.get("user")
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.