1. 程式人生 > >簡單操作django中session和cookie

簡單操作django中session和cookie

cookie

1.會話技術
  2.客戶端的會話技術( 資料庫儲存在瀏覽器上)
  3.問題導致原因: 在web應用中,一次網路請求是從request開始,到response結束,跟以後的請求或者跟其他請求沒有關係
  導致每次請求之間的資料沒有關係 (短連結,長連線:QQ)
  解決: 在客戶端保留資料(cookie)或者服務端保留資料(session)來建立關係
  4.cookie的使用
    1.存
    格式: response.set_cookie(key,value)
    通過response通知瀏覽器要儲存key,value形式的cookie

    示例:  

    
    
def session_and_cookie(req):
    req.session['int'] = '正軍'
    resp = HttpResponse('設定cookie')  #可以改成重定向等,但
    # 改成重定向的話函式或者類需要寫在檢視view裡面,這與django的請求生命週期有關
    resp.set_signed_cookie('uname',json.dumps('凱子'))
    resp.set_cookie('name','qwertui')
    resp.set_signed_cookie(
'shaxx','biding',salt='shax') #帶簽名的cookie(加鹽) return resp
View Code

 

    2. 取
    如果瀏覽器保留了cookie,那麼每次請求該伺服器的時候,會自動的攜帶該cookie
    格式: request.COOKIES.get(key)

    示例:

    

    
def get_session_and_cookie(req):
    data = {
        'key':req.session.get('int'),
        
'name':req.COOKIES.get('name'), 'uname':req.COOKIES.get('uname'), 'shaxx':req.get_signed_cookie('shaxx',salt='shax') #獲取帶簽名的cookie(鹽要相同,不然拿不到) } return JsonResponse(data)
View Code

 

    3.設定過期時間
    預設情況下,關閉瀏覽器cookie就會過期,有時候我們需要設定過期時間:

    格式: response.set_cookie(key,value,expires=值)
    expires=0 立馬過期
    expires=None 用不過期
    expires= 值 單位是秒

    expires=timedelta(days=值) 表示多少天后過期 hours=值 表示多少小時後過期.....


    4.刪除
    response.delete_cookie(key)

    5.cookie的應用場景:1.儲存賬號,密碼 2.京東的購物車 3.保留使用者的瀏覽資訊 .....

    **cookie中文問題: response.set_cookie(key,json.dumps(value)) 即可

    注意:設定好cookie之後一定要返回給瀏覽器

cookie原理圖

 

session  

  1.會話技術
  2.服務端的會話技術
  3.需要客戶端的支援才可以
  4.使用:
    1.存
    格式: request.session[key] = value

    注意:在django中儲存了一個session後,django會 自動 的生成session key,並將session key與 資料自

    動的儲存到 django_session表中去,資料會自動的用base64編碼,並會 自動 的讓瀏覽器的cookie儲存

    sessionid(就是sessison key) (在使用session前需要先做資料遷移)


    2.取
    格式: value = request.session.get(key)
    注意: 在django中,會 自動 的將cookie中的sessionid拿出來跟資料庫中的session key匹配,匹配成功後既可以獲取值

    3.清除
    1.清除對應的cookie
    2. del request.session
    推薦的:3. request.session.flush() 會清楚對應的cookie及session

    5.應用: 使用者登陸認證

session原理圖