HTTP協(xié)議是一個無狀態(tài)協(xié)議
,即每一個請求都是獨立的!無法記錄前一次請求的狀態(tài),但HTTP會使用cookie值進行跟蹤會話。在WEB開發(fā)當(dāng)中,使用session來完成會話跟蹤,session底層依賴于cookie技術(shù)。
邊壩ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
其實cookies是由網(wǎng)絡(luò)服務(wù)器存儲在你電腦硬盤上的一個txt類型的小文件,它和你的網(wǎng)絡(luò)瀏覽行為有關(guān),所以存儲在你電腦上的cookies就好像你的一張身份證,你電腦上的cookies和其他電腦上的cookies是不一樣的;cookies不能被視作代碼執(zhí)行,也不能成為病毒,所以它對你基本無害。
在HTTP中,表示服務(wù)器對瀏覽器的“小甜點”。其實cookie是一個{key:value}結(jié)構(gòu),隨著服務(wù)器的響應(yīng)發(fā)送給客戶端瀏覽器,然后客戶端可以把cookie保存下來,當(dāng)下一次訪問同一服務(wù)器的時候把cookie再返回給客戶端。cookie是由服務(wù)器創(chuàng)建,然后通過響應(yīng)發(fā)送給客戶端的一個鍵值對。當(dāng)客戶端向服務(wù)器再次提交請求時,把這個cookie會一起發(fā)送過去,這樣服務(wù)器就會識別到這個客戶端,默認會填寫一些信息,方便訪問服務(wù)器。
在django框架下我們簡單的實現(xiàn)一下,代碼原理如下:
我們目標(biāo)是通過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 == "":
return redirect("/index")
else:
return render(request,"login.html")
但是現(xiàn)在問題存在于,我們直接去訪問index頁面也是可以獲取到的,從而就繞過了login的驗證
所以希望可以存在一個東西,在訪問index頁面時可以驗證是否有登錄,如果沒有登錄就訪問,服務(wù)器就需要把他返回到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 == "":
#登陸成功時,再寫cookie
res = HttpResponse("登錄成功")
res.set_cookie("is_login","true")
return res
else:
return render(request,"login.html")
上述例子可以看出來,cookie值存放的很簡單,這就使得有很大的風(fēng)險被盜取cookie,因此我們引入一個摘要值salt
res.set_signed_cookie("is_login","true",salt="")
服務(wù)器端接收的時候也需要改一下接收語句
is_login = request.get_signed_cookie("is_login",salt="")