小談Django中的Cookie
阿新 • • 發佈:2020-10-12
cookie
cookie是伺服器發出來儲存在瀏覽器上的一組組鍵值對,下次訪問伺服器時瀏覽器會自動攜帶這些鍵值對
原理:
由伺服器產生內容,瀏覽器收到請求後儲存在本地,當瀏覽器再次訪問時,瀏覽器會自動帶上cookie,這樣伺服器就能通過cookie的內容來判斷是誰來了.
獲取cookie
request.COOKIES['key'] # request.COOKIES.get('key')
request.get_signed_cookie('key',default=RAISE_ERROR,salt='',max_age=None)
設定cookie
rep = HttpResponse(...) rep = render(request,...) rep指代response物件 rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt='加密鹽',...)
引數:
- key:鍵 value:值
- max_age=None 超時時間
- expires=None 超時時間(IE瀏覽器用的)
- path='/' cookie生效的路徑, / 表示根路徑,特殊的: 根路徑的cookie可以被任意的url訪問
- domain=None cookie生效的域名
- secure=False https傳輸
- httponly=False 只能http協議傳輸,無法被JavaScript獲取(不絕對)
刪除cookie
def logout(request): rep = redirect("/login/") # 刪除使用者瀏覽器之前設定的user的cookie的值 rep.delete_cookie("user") return rep
cookie版登入校驗
def login_required(func): def innner(request, *args, **kwargs): is_login = request.COOKIES.get('is_login') if is_login != '1': return redirect('/login/?returnUrl={}'.format(request.path_info)) ret = func(request, *args, **kwargs) return ret return innner def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') if username == 'alex' and password == 'dsb': return_url = request.GET.get('returnUrl') ret = redirect(return_url if return_url else '/classes/') ret.set_cookie('is_login', '1') return ret return render(request, 'login.html')