TZ:運(yùn)動(dòng)使人心情愉悅
一 : 科普一分鐘
Cookie
可以翻譯為“小甜品沦补,小餅干” 边涕,Cookie 在網(wǎng)絡(luò)系統(tǒng)中幾乎無(wú)處不在眶诈,當(dāng)我們?yōu)g覽以前訪問(wèn)過(guò)的網(wǎng)站時(shí)但金,網(wǎng)頁(yè)中可能會(huì)出現(xiàn) :你好 .xx韭山,Cookie
其實(shí)是客戶端記錄用戶行為的一個(gè)文件,形式通常是鍵值對(duì)的方式,大家可能有過(guò)這種經(jīng)歷,登錄網(wǎng)站有的瀏覽器會(huì)提示,是否保存Cookie
,在這里與大家聊一聊在Django 框架下如何使用和操作小餅干.
二: Cookie以驗(yàn)證使用方法
- Django下使用
cookie
進(jìn)行登錄驗(yàn)證
登錄頁(yè)面對(duì)應(yīng)函數(shù)
def login(request):
if request.method == 'GET':
return render(request,'login2.html')
if request.method == 'POST':
u = request.POST.get('username')
p = request.POST.get('pwd')
dic = user_info.get(u)
if not dic:
return render(request,'login2.html')
current_date = datetime.datetime.utcnow()
current_date = current_date + datetime.timedelta(seconds=10)
if dic['pwd'] == p:
res = redirect('/myapp/index')
# res.set_cookie('username',u,max_age=10)
#對(duì)cookie設(shè)置了超時(shí)時(shí)間和安全設(shè)置
res.set_cookie('username',u,expires=current_date,httponly=True)
# res.set_signed_cookie('username',u,salt="121221")
return res
else:
return render(request,'login2.html')
詳情頁(yè)面 如果cookie 驗(yàn)證通過(guò)則進(jìn)入Index頁(yè)面 否則刷新進(jìn)入登錄頁(yè)面
def auth(func):
def inner(request,*args,**kwargs):
v = request.COOKIES.get('username')
if not v:
return redirect('/myapp/login')
return func(request,*args,**kwargs)
return inner
@auth
def index(request):
v = request.COOKIES.get('username')
return render(request,'index2.html',{'current_user':v})
三 : Session以及驗(yàn)證使用方法
Session的意義
對(duì)于Session 就是保存在后臺(tái)數(shù)據(jù)或者緩存中的一個(gè)鍵值對(duì),同樣的存儲(chǔ)著用戶信息,為了更好的保護(hù)用戶隱私,其實(shí)是對(duì)前端cookie的一個(gè)升級(jí)的保護(hù)措施.Session 的原理
當(dāng)?shù)卿洺晒?會(huì)向后臺(tái)數(shù)據(jù)庫(kù) 與 前端Cookie
同時(shí)發(fā)放一段隨機(jī)字符串
,分別保存在后臺(tái)的session中,前端 寫(xiě)到用戶瀏覽器中,用戶下次登錄時(shí)候 拿著瀏覽器存著的sessionID
當(dāng)做KEY
去后臺(tái)數(shù)據(jù)庫(kù)中匹配進(jìn)行驗(yàn)證登錄即可拿到用戶相關(guān)信息,可以防止敏感信息直接暴露在瀏覽器上.
登錄頁(yè)邏輯
- Django下用Session 進(jìn)行登錄驗(yàn)證
ef sessionLogin(request):
if request.method == "GET":
return render(request,'sessionLogin.html')
elif request.method == "POST":
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'root' and pwd =="123":
#生成隨機(jī)字符串
#寫(xiě)到用戶瀏覽器
#保存到session中
#在隨機(jī)字符串對(duì)應(yīng)的字典中設(shè)置相關(guān)內(nèi)容...
request.session['username'] = user
request.session['is_login'] = True
if request.POST.get('rmb',None) == '1':
request.session.set_expiry(10)
return redirect('/myapp/sessionindex')
else:
return render(request, 'sessionLogin.html')
詳情頁(yè)邏輯
def sessionindex(request):
#獲取當(dāng)前用戶的隨機(jī)字符串
#根據(jù)隨機(jī)字符串獲取對(duì)應(yīng)信息
if request.session.get('is_login',None):
return render(request,'sessionindex.html',{'username':request.session['username']})
else:
return HttpResponse('get out')
四 : 總結(jié)
綜上粗淺的介紹了了 Cookie與Session在Django下的基本使用,在實(shí)際開(kāi)發(fā)中我們還要在setting設(shè)置 Session存儲(chǔ)的引擎等細(xì)節(jié).
Session
是在服務(wù)端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)跟蹤用戶的狀態(tài)冷溃,這個(gè)數(shù)據(jù)可以保存在集群钱磅、數(shù)據(jù)庫(kù)、文件中似枕;
Cookie
是客戶端保存用戶信息的一種機(jī)制盖淡,用來(lái)記錄用戶的一些信息,也是實(shí)現(xiàn)Session的一種方式凿歼。