1. 程式人生 > 實用技巧 >小談Django中的Cookie

小談Django中的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')