1. 程式人生 > >python--Django之cookie的設定、獲取,加密,刪除

python--Django之cookie的設定、獲取,加密,刪除

設定cookie之前我們先了解一下cookie,如下圖,cookie以鍵值對的形式存在,

鍵和值以逗號分隔,不同的鍵值對以;(分號)隔開。

因此我們設定cookie時,也要以鍵值對的形式設定.

 cookie的設定

  1. 通過檢視原始碼我們可以知道cookie中可以設定的引數如下:
    def set_cookie(self, key, value='', max_age=None, expires=None,
                       path='/', domain=None, secure=False, httponly=False,
                       samesite=None):
    
    

    key:鍵
    value:值
    max_age:設定過期時間(秒),如果未設定預設關閉瀏覽器失效
    expires:設定過期時間,時間戳的形式(1970離現在的時間)
    path:當前主域名
    domain:子域名
    secure:True           true意味著"指示瀏覽器僅通過 HTTPS 連線傳回 cookie。這可以確保 cookie ID 是安全的,且僅用於                                                  使用 HTTPS 的網站。如果啟用此功能,則 HTTP 上的會話 Cookie 將不再起作用
    httponly=False         設定HttpOnly=true的cookie不能被js獲取到,無法用document.cookie打出cookie的內容

    例項:  

    response = HttpResponseRedirect('/index/')
    response.set_cookie('email',user.email,10)
    return response

     

cookie的獲取  

  1. cookie的獲取方法為:response.cookie.get('cookie設定的引數')

    下面我們通過一個裝飾器來實現cookie的獲取
    def loginValid(fun):
        def inner(request,*args,**kwargs):
            cookie = request.COOKIES
            email = cookie.get('email')
            if email:
                return fun(request,*args,**kwargs)
            else:
                return HttpResponseRedirect("/login/")
        return inner
    
    
    @loginValid
    def index(request):
        return render_to_response("index.html",locals())

     

cookie的刪除

  1. cookie的獲取方法為:response.delete_cookie方法,指定cookie的key,我們就可以刪除cookie了
    def delete_cookie():
        response = HttpResponseRedirect('/index/')
        response.delete_cookie('username') #刪除cookie
        return response

     

cookie的加密

  1. cookie的加密設定:與上面的cookie的設定相同,關鍵字不同
    response.set_signed_cookie('email',email,salt="salt")
  2. cookie的獲取解密:與上面的cookie的獲取相同,關鍵字不同
     
    responset.get_signed_cookie('email',email,salt="salt")


    cookie的加密和解密要對應相同的salt(鹽值),這樣才能確保網站的正常訪問