添加明文cookiehtml
response.set_cookie(key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False)
添加加密cookie數據庫
response.set_signed_cookie(key, value, salt='', **kwargs)
key:鍵 value='':值 max_age=None:超時時間(單位爲秒) expires=None:超時時間(針對IE) path='/': Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie能夠被任何url的頁面訪問 domain=None:Cookie生效的域名 secure=False:https傳輸 httponly=False:只能http協議傳輸,沒法被JavaScript獲取(不是絕對,底層抓包能夠獲取到也能夠被覆蓋)
獲取明文cookie。瀏覽器
request.COOKIES['key']
獲取加密cookie。cookie
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
default: 默認值 salt='': 加密鹽 max_age=None: 後臺控制過時時間
刪除用戶瀏覽器上以前設置的對應key的cookie。session
response.delete_cookie(key, path='/', domain=None)
key:鍵 path='/': Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie能夠被任何url的頁面訪問 domain=None:Cookie生效的域名
1 # 校驗登陸裝飾器 2 def check_login(func): 3 @wraps(func) 4 def inner(request, *args, **kwargs): 5 next_url = request.get_full_path() 6 # 用登陸時設置的鹽獲取指定key的cookie 7 if request.get_signed_cookie("isLogin", salt="salt", default=None) == "yes": 8 # 已經登陸的用戶 9 return func(request, *args, **kwargs) 10 else: 11 # 沒有登陸的用戶,跳轉到登陸頁面 12 return redirect("/login/?next={}".format(next_url)) 13 return inner 14 15 # 登陸 16 def login(request): 17 if request.method == "POST": 18 username = request.POST.get("username") 19 passwd = request.POST.get("password") 20 if username == "username" and passwd == "password": 21 next_url = request.GET.get("next") 22 if next_url: 23 response = redirect(next_url) 24 else: 25 response = redirect("/home/") 26 # 設置cookie並加鹽 27 response.set_signed_cookie("isLogin", "yes", salt="salt") 28 return response 29 return render(request, "login.html")
request.session[key] = value request.session.setdefault(key,value) # 存在則不設置
request.session[key] request.session.get(key,default) # 未獲取到值時使用默認值default
del request.session[key]
request.session.keys() # 獲取全部鍵 request.session.values() # 獲取全部值 request.session.items() # 獲取全部鍵值 request.session.set_expiry(7) # 設置超時時間 request.session.session_key # 獲取sessionid值 request.session.clear_expired() # 將全部Session失效日期小於當前日期的數據刪除 request.session.exists(session_key) # 檢查會話session的key(sessionid)在數據庫中是否存在 request.session.delete() # 刪除當前會話的全部Session數據 request.session.flush() # 刪除當前的會話數據並刪除會話的 request.session.set_expiry(value) Cookie # 設置會話Session和Cookie的超時時間 * 若是value是個整數,session會在些秒數後失效。 * 若是value是個datatime或timedelta,session就會在這個時間後失效。 * 若是value是0,用戶關閉瀏覽器session就會失效。 * 若是value是None,session會依賴全局session失效策略。
1 from functools import wraps 2 3 4 def check_login(func): 5 @wraps(func) 6 def inner(request, *args, **kwargs): 7 next_url = request.get_full_path() 8 if request.session.get("user"): 9 return func(request, *args, **kwargs) 10 else: 11 return redirect("/login/?next={}".format(next_url)) 12 return inner 13 14 15 def login(request): 16 if request.method == "POST": 17 user = request.POST.get("user") 18 pwd = request.POST.get("pwd") 19 20 if user == "alex" and pwd == "alex1234": 21 # 設置session 22 request.session["user"] = user 23 # 獲取跳到登錄頁面以前的URL 24 next_url = request.GET.get("next") 25 # 若是有,就跳轉回登錄以前的URL 26 if next_url: 27 return redirect(next_url) 28 # 不然默認跳轉到index頁面 29 else: 30 return redirect("/index/") 31 return render(request, "login.html") 32 33 34 @check_login 35 def logout(request): 36 # 刪除全部當前請求相關的session 37 request.session.delete() 38 return redirect("/login/") 39 40 41 @check_login 42 def index(request): 43 current_user = request.session.get("user", None) 44 return render(request, "index.html", {"user": current_user})