Django의 cookies 및 session

14414 단어 django
Cookies: 브라우저가 웹 서버에 저장하는 작은 정보입니다.브라우저가 어떤 서버에서 페이지를 요청할 때마다, 브라우저는 서버에 이전에 받은 cookies를 전송합니다.브라우저의 폴더 아래에 저장됩니다.Session: Django의 Session 메커니즘은 요청한 브라우저에 쿠키 문자열을 보냅니다.브라우저 로그인이 동일한 사용자인지 확인하기 위해 로컬에 저장됩니다.이것은 서버에 존재합니다. Django는 기본적으로session을 데이터베이스에 저장합니다.
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")

좋은 웹페이지 즐겨찾기