真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

django中的cookie、session和token

發(fā)展史

1.早期的時(shí)候,網(wǎng)站都沒有保存用戶功能的需求,所有用戶訪問網(wǎng)站返回的結(jié)果都是一樣的,比如新聞、文章等網(wǎng)站!

創(chuàng)新互聯(lián)公司長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為開福企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,開福網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

2.但是,隨著網(wǎng)站的發(fā)展,出現(xiàn)了一些需要保存用戶信息的網(wǎng)站,比如:淘寶、京東、個(gè)人博客等!

3.以登錄功能為例,如果不保存用戶登錄的信息,就意味著用戶每次都需要重新登錄網(wǎng)站,為此非常的麻煩。

4.為了解決上述的麻煩,便產(chǎn)生了cookie和session

1.cookie

1.1 什么是cookie

當(dāng)用戶第一次登錄之后,瀏覽器會(huì)將您登錄之后的用戶名和密碼保存到用戶瀏覽器,讓其保存在本地,之后再次訪問網(wǎng)站的時(shí)候,瀏覽器會(huì)幫您自動(dòng)的將保存的用戶名和密碼發(fā)送到瀏覽器,這樣就省去了登錄的操作!

裝逼小技巧:當(dāng)你點(diǎn)擊瀏覽器的設(shè)置,在里面查找cookie權(quán)限時(shí),選擇不允許站點(diǎn)保存cookie時(shí),以后該瀏覽器上需要用到記錄用戶狀態(tài)(登錄)的功能都無法實(shí)現(xiàn)了!

1.2 為什么要用cookie

為了減少每次登錄網(wǎng)站都要登錄的麻煩,減少用戶每次操作都需要登錄的操作(每次添加到購物車一下就需要登錄將非常的麻煩)!

1.3 cookie的危害

早期這樣將用戶的信息保存在瀏覽器是有非常大的隱患的!其他人很容易在瀏覽器內(nèi)看到你保存的用戶名和密碼,這樣用戶的信息就不安全了!

1.4 如何使用cookie

存儲(chǔ)/添加/修改:
def set_cookies(request):
    resp = HttpResponse('set cookies is ok')
    resp.set_cookie('uuname', 'zhangyang', max_age=500,expires=500)
return resp
每一個(gè)響應(yīng)對(duì)象對(duì)有一個(gè)set_cookies方法里面的參數(shù)分別是:key、value、max_age保存時(shí)間單位s,expires對(duì)于ie瀏覽器生效的保存時(shí)間
刪除:
httpresponse.delete_cookie(‘key’)--刪除指定key的cookie,如果key不存在,則什么也不發(fā)生
獲取cookies:
?value = request.COOKIES.get('key’,'默認(rèn)值‘)
利用cookie制作動(dòng)態(tài)跳轉(zhuǎn)登錄
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect

# 裝飾器 實(shí)現(xiàn)功能是只有登錄了之后才能訪問到該頁面,否則跳轉(zhuǎn)到登錄頁面
def login_out(func):
    def wrapper(request,*args,**kwargs):
        target_url = request.get_full_path()
        # print(target_url)
        if request.COOKIES.get('username'):
            res=func(request,*args,**kwargs)
            return res
        else:
            # 此處的設(shè)計(jì)是為了動(dòng)態(tài)的獲取用戶是從那個(gè)頁面進(jìn)行登錄的,如何執(zhí)行登錄之后在跳轉(zhuǎn)回該頁面
            return HttpResponseRedirect('/login?next=%s'%target_url)
    return wrapper

# Create your views here.
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username=='zhang' and password=='123':
            # 獲取用戶是從哪個(gè)頁面登錄的url
            url = request.GET.get('next')
            if url:
                # 獲取到了則登錄成功跳轉(zhuǎn)到該頁面
                obj = HttpResponseRedirect(url)
            else:
                # 沒有獲取到則跳轉(zhuǎn)到默認(rèn)頁面
                obj = HttpResponseRedirect('/login')
            obj.set_cookie('username','zhang')
            return obj
    return render(request,'login.html')

@login_out
def home(request):
    return HttpResponse('這是登錄之后的home頁面')

@login_out
def index(request):
    return HttpResponse('這是登錄之后的導(dǎo)航頁')

2. session

2.1 什么是session

為了解決cookie產(chǎn)生的危害,便產(chǎn)生了session,session是借助cookie進(jìn)行工作的!當(dāng)用戶將登錄的信息返回到服務(wù)器,服務(wù)器會(huì)將用戶的信息保存在服務(wù)器內(nèi)并返回一個(gè)隨機(jī)的字符串給瀏覽器,該字符串與這個(gè)用戶的信息相對(duì)應(yīng)!瀏覽器將這個(gè)隨機(jī)字符串以cookie的形式保存在瀏覽器本地,以后每次需要訪問網(wǎng)站的時(shí)候,瀏覽器就會(huì)把這個(gè)cookie的隨機(jī)字符串返回給服務(wù)器,服務(wù)器匹配與之對(duì)應(yīng)的用戶信息返回給前端!

2.2 為什么要有session

為了解決cookie所存在的安全隱患,更好的保護(hù)用戶的隱私。

2.3 如何使用session

session對(duì)象是一個(gè)類似于字典的對(duì)象,可以用類似字典的方式進(jìn)行操作--session能夠存儲(chǔ)字符串、整形、字典、列表等

1.保存session的值到服務(wù)器
def set_session(request):
    request.session['uname'] =  'wwc'   ---存儲(chǔ)session的寫法
"""
    內(nèi)部發(fā)送了那些事
        1.django內(nèi)部會(huì)自動(dòng)幫你生成一個(gè)隨機(jī)字符串
        2.django內(nèi)部自動(dòng)將隨機(jī)字符串和對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)到django_session表中
            2.1先在內(nèi)存中產(chǎn)生操作數(shù)據(jù)的緩存
            2.2在響應(yīng)結(jié)果django中間件的時(shí)候才真正的操作數(shù)據(jù)庫
        3.將產(chǎn)生的隨機(jī)字符串返回給客戶端瀏覽器保存
"""
return HttpResponse('set session is ok')
存儲(chǔ)時(shí)會(huì)報(bào)錯(cuò)時(shí),可能是因?yàn)闆]有執(zhí)行數(shù)據(jù)庫遷移命令,因?yàn)閟ession是保存在服務(wù)端的,它需要django中有一張默認(rèn)的django_session表

2.獲取已經(jīng)存儲(chǔ)的session值
def get_session(request):
    value = request.session.get['uname',默認(rèn)值]
"""
    內(nèi)部發(fā)送了那些事
        1.自動(dòng)從瀏覽器請(qǐng)求中獲取sessionid對(duì)應(yīng)的隨機(jī)字符串
        2.拿著該隨機(jī)字符串去django_session表中查找對(duì)應(yīng)的數(shù)據(jù)
        3.
            如果比對(duì)上了 則將對(duì)應(yīng)的數(shù)據(jù)取出并以字典的形式封裝到request.session中
            如果比對(duì)不上 則request.session.get()返回的是None
"""
return HttpResponse('session value is %s' % value)

3.刪除session
del request.session['key']
request.session.delete()  # 只刪服務(wù)端的 客戶端的不刪
request.session.flush()  # 瀏覽器和服務(wù)端都清空(推薦使用)

4.設(shè)置session的保存時(shí)長(默認(rèn)是2周)
法一:
	request.session.set_expiry()
	括號(hào)內(nèi)可以放四種類型的參數(shù)
	1.整數(shù)		多少秒
	2.日期對(duì)象	指定日期就失效
	3.0		一旦當(dāng)前瀏覽器窗口關(guān)閉立刻失效
	4.不寫		失效時(shí)間就取決于django內(nèi)部全局session默認(rèn)的失效時(shí)間
法二:
	在setting.py中添加配置項(xiàng)SESSION_COOKIE_AGE=60*60*24*7*2
	或者設(shè)置SESSION_EXPIRE_AT_BROWSER_CLOSE = True---表示只要瀏覽器關(guān)閉時(shí),session就失效(默認(rèn)為Flase)

5.其他需要了解的知識(shí)點(diǎn)
session是保存在服務(wù)端的 但是session的保存位置可以有多種選擇
	1.MySQL
	2.文件
	3.redis
	4.memcache
	...

django_session表中的數(shù)據(jù)條數(shù)是取決于瀏覽器的
	同一個(gè)計(jì)算機(jī)上(IP地址)同一個(gè)瀏覽器只會(huì)有一條數(shù)據(jù)生效
	(當(dāng)session過期的時(shí)候可能會(huì)出現(xiàn)多條數(shù)據(jù)對(duì)應(yīng)一個(gè)瀏覽器,但是該現(xiàn)象不會(huì)持續(xù)很久,內(nèi)部會(huì)自動(dòng)識(shí)別過期的數(shù)據(jù)清除 你也可以通過python3 manage.py clearsessions清除)
	主要是為了節(jié)省服務(wù)端數(shù)據(jù)庫資源

小練習(xí):如何利用session完成動(dòng)態(tài)跳轉(zhuǎn)登錄

3.token

3.1什么是token

當(dāng)我們使用session在服務(wù)端存儲(chǔ)用戶的信息,如果用戶過多,存儲(chǔ)信息量大,則很耗費(fèi)服務(wù)端資源!因此,產(chǎn)生了token來解決這一問題。

token就是一串加密的字符串,該字符串即保存著用戶信息又安全,在發(fā)送給服務(wù)端時(shí),我們可以對(duì)該字符串用我們的算法進(jìn)行比對(duì),如果正確則用戶信息正確,不一致則被篡改了!

小作業(yè):通過django中間件實(shí)現(xiàn)token功能!

思路圖:


本文題目:django中的cookie、session和token
當(dāng)前地址:http://weahome.cn/article/dsogicd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部