cookie
HTTP協議是一個無狀態協議,即每一個請求都是獨立的!無法記錄前一次請求的狀態,但HTTP會使用cookie值進行跟蹤會話,在WEB開發當中,使用session來完成會話跟蹤,session底層依賴于cookie技術,
其實cookies是由網路服務器存盤在你電腦硬碟上的一個txt型別的小檔案,它和你的網路瀏覽行為有關,所以存盤在你電腦上的cookies就好像你的一張身份證,你電腦上的cookies和其他電腦上的cookies是不一樣的;cookies不能被視作代碼執行,也不能成為病毒,所以它對你基本無害,
cookie
在HTTP中,表示服務器對瀏覽器的“小甜點”,其實cookie是一個{key:value}結構,隨著服務器的回應發送給客戶端瀏覽器,然后客戶端可以把cookie保存下來,當下一次訪問同一服務器的時候把cookie再回傳給客戶端,cookie是由服務器創建,然后通過回應發送給客戶端的一個鍵值對,當客戶端向服務器再次提交請求時,把這個cookie會一起發送過去,這樣服務器就會識別到這個客戶端,默認會填寫一些資訊,方便訪問服務器,

cookie應用
在django框架下我們簡單的實作一下,代碼原理如下:
我們目標是通過login視圖,進行登錄,然后獲取到index頁面,
def index(request):
return render(request,"index.html")
def login(request):
if request.method == "GET":
return render(request,"login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
if user == "regina" and pwd == "127717":
return redirect("/index")
else:
return render(request,"login.html")
但是現在問題存在于,我們直接去訪問index頁面也是可以獲取到的,從而就繞過了login的驗證
所以希望可以存在一個東西,在訪問index頁面時可以驗證是否有登錄,如果沒有登錄就訪問,服務器就需要把他回傳到login頁面,如果有就展示index頁面
def index(request):
print(request.COOKIES.get("is_login"))
is_login = request.COOKIES.get("is_login")
if is_login == "true":
return render(request,"index.html")
else:
return redirect("/login")
def login(request):
if request.method == "GET":
return render(request,"login.html")
else:
user = request.POST.get("user")
pwd = request.POST.get("pwd")
if user == "regina" and pwd == "127717":
#登陸成功時,再寫cookie
res = HttpResponse("登錄成功")
res.set_cookie("is_login","true")
return res
else:
return render(request,"login.html")

salt值
上述例子可以看出來,cookie值存放的很簡單,這就使得有很大的風險被盜取cookie,因此我們引入一個摘要值salt
res.set_signed_cookie("is_login","true",salt="20000127")
服務器端接收的時候也需要改一下接收陳述句
is_login = request.get_signed_cookie("is_login",salt="20000127")

本文來自博客園,作者:ivanlee717,轉載請注明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16865223.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528723.html
標籤:Python
上一篇:Python工具箱系列(十一)
