濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Django操作cookie的實(shí)現(xiàn)

Django操作cookie的實(shí)現(xiàn)

熱門標(biāo)簽:應(yīng)電話機(jī)器人打電話違法嗎 電銷機(jī)器人的風(fēng)險(xiǎn) 400電話辦理哪種 河北防封卡電銷卡 手機(jī)網(wǎng)頁(yè)嵌入地圖標(biāo)注位置 天津電話機(jī)器人公司 開(kāi)封語(yǔ)音外呼系統(tǒng)代理商 地圖標(biāo)注線上如何操作 開(kāi)封自動(dòng)外呼系統(tǒng)怎么收費(fèi)

前言

cookie:在網(wǎng)站中,http請(qǐng)求是無(wú)狀態(tài)的。也就是說(shuō)即使第一次和服務(wù)器連接后并且登錄成功后,第二次請(qǐng)求服務(wù)器依然不能知道當(dāng)前請(qǐng)求是哪個(gè)用戶。cookie的出現(xiàn)就是為了解決這個(gè)問(wèn)題,第一次登錄后服務(wù)器返回一些數(shù)據(jù)(cookie)給瀏覽器,然后瀏覽器保存在本地,當(dāng)該用戶發(fā)送第二次請(qǐng)求的時(shí)候,就會(huì)自動(dòng)的把上次請(qǐng)求存儲(chǔ)的cookie數(shù)據(jù)自動(dòng)的攜帶給服務(wù)器,服務(wù)器通過(guò)瀏覽器攜帶的數(shù)據(jù)就能判斷當(dāng)前用戶是哪個(gè)了。cookie存儲(chǔ)的數(shù)據(jù)量有限,不同的瀏覽器有不同的存儲(chǔ)大小,但一般不超過(guò)4KB。因此使用cookie只能存儲(chǔ)一些小量的數(shù)據(jù)。

cookie的特點(diǎn):

    ⑴以鍵值對(duì)方式進(jìn)行存儲(chǔ)
    ⑵通過(guò)瀏覽器訪問(wèn)一個(gè)網(wǎng)站時(shí),會(huì)將瀏覽器存儲(chǔ)的跟網(wǎng)站相關(guān)的所有cookie信息發(fā)送給該網(wǎng)站的服務(wù)器
    ⑶cookie是基于域名安全的
    ⑷cookie是有過(guò)期時(shí)間的,如果不指定,默認(rèn)關(guān)閉瀏覽器之后cookie就會(huì)過(guò)期

Cookie的不可跨域名性

1、很多網(wǎng)站都會(huì)使用Cookie。例如,Google會(huì)向客戶端頒發(fā)Cookie,Baidu也會(huì)向客戶端頒發(fā)Cookie。那瀏覽器訪問(wèn)Google會(huì)不會(huì)也攜帶上Baidu頒發(fā)的Cookie呢?或者Google能不能修改Baidu頒發(fā)的Cookie呢

2、答案是否定的。Cookie具有不可跨域名性。根據(jù)Cookie規(guī)范,瀏覽器訪問(wèn)Google只會(huì)攜帶Google的Cookie,而不會(huì)攜帶Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie

3、Cookie在客戶端是由瀏覽器來(lái)管理的。瀏覽器能夠保證Google只會(huì)操作Google的Cookie而不會(huì)操作Baidu的Cookie,從而保證用戶的隱私安全。瀏覽器判斷一個(gè)網(wǎng)站是否能操作另一個(gè)網(wǎng)站Cookie的依據(jù)是域名。Google與Baidu的域名不一樣,因此Google不能操作Baidu的Cookie

4、需要注意的是,雖然網(wǎng)站images.google.com與網(wǎng)站www.google.com同屬于Google,但是域名不一樣,二者同樣不能互相操作彼此的Cookie

設(shè)置cookie

設(shè)置cookie是設(shè)置值給瀏覽器的。因此我們需要通過(guò)response的對(duì)象來(lái)設(shè)置,設(shè)置cookie可以通過(guò)response.set_cookie來(lái)設(shè)置,這個(gè)方法的相關(guān)參數(shù)如下:

  • key:這個(gè)cookie的key。
  • value:這個(gè)cookie的value。
  • max_age:最長(zhǎng)的生命周期。單位是秒。
  • expires:過(guò)期時(shí)間。跟max_age是類似的,只不過(guò)這個(gè)參數(shù)需要傳遞一個(gè)具體的日期,比如datetime或者是符合日期格式的字符串。如果同時(shí)設(shè)置了expires和max_age,那么將會(huì)使用expires的值作為過(guò)期時(shí)間。
  • path:對(duì)域名下哪個(gè)路徑有效。默認(rèn)是對(duì)域名下所有路徑都有效。
  • domain:針對(duì)哪個(gè)域名有效。默認(rèn)是針對(duì)主域名下都有效,如果只要針對(duì)某個(gè)子域名才有效,那么可以設(shè)置這個(gè)屬性.
  • secure:是否是安全的,如果設(shè)置為True,那么只能在https協(xié)議下才可用。
  • httponly:默認(rèn)是False。如果為True,那么在客戶端不能通過(guò)JavaScript進(jìn)行操作。

獲取cookie

獲取瀏覽器發(fā)送過(guò)來(lái)的cookie信息。可以通過(guò)request.COOKIES來(lái)或者。這個(gè)對(duì)象是一個(gè)字典類型。比如獲取所有的cookie,那么示例代碼如下:

cookies = request.COOKIES
for cookie_key,cookie_value in cookies.items():
   print(cookie_key,cookie_value)

刪除cookie

通過(guò)delete_cookie即可刪除cookie。實(shí)際上刪除cookie就是將指定的cookie的值設(shè)置為空的字符串,然后使用將他的過(guò)期時(shí)間設(shè)置為0,也就是瀏覽器關(guān)閉后就過(guò)期。

實(shí)戰(zhàn)案例

我們先在uris.py中寫(xiě)入三個(gè)路由,一個(gè)設(shè)置cookie路由,一個(gè)獲取cookie路由,一個(gè)刪除cookie路由,代碼如下:

# 項(xiàng)目根路由
urlpatterns = [
    path('cookie_app/', include('cookie_app.urls')),
]

# cookie_app.urls.py
urlpatterns = [
    path('set_cookie/', views.set_cookie),
    path('get_cookie/', views.get_cookie),
    path('delete_cookie/', views.delete_cookie),
]

接著我們?cè)?code>views.py視圖中寫(xiě)入對(duì)應(yīng)的視圖,代碼如下:

def set_cookie(request):
    """設(shè)置cookie"""
    response = HttpResponse('success')
    response.set_cookie('username', 'jkc', max_age=180)  # 設(shè)置cookie,過(guò)期時(shí)間為180秒
    return response


def get_cookie(request):
    """獲取cookie"""
    cookies = request.COOKIES
    return HttpResponse(cookies.items())


def delete_cookie(request):
    """刪除cookie"""
    response = HttpResponse('刪除cookie成功')
    response.delete_cookie('username')
    return response

接下來(lái)我們?cè)L問(wèn)url地址127.0.0.1/cookie_app/set_cookie/,打開(kāi)F12,我們可以看到網(wǎng)絡(luò)請(qǐng)求中的response header中有set-cookie字段


我們也可以打開(kāi)網(wǎng)站地址上的!,如下圖


然后會(huì)出現(xiàn)彈出以下的窗口,點(diǎn)擊cookie


我們會(huì)查看到自己剛才設(shè)置的cookieusername,且過(guò)期時(shí)間是之前設(shè)置的3分鐘



接下來(lái)我們?cè)L問(wèn)http://127.0.0.1:8000/cookie_app/get_cookie/獲取cookie,瀏覽器頁(yè)面會(huì)返回('username', 'jkc'),我們也可以打開(kāi)F12查看請(qǐng)求頭的信息,會(huì)發(fā)現(xiàn)請(qǐng)求頭中攜帶了cookie信息,如下圖


最后我們?cè)L問(wèn)http://127.0.0.1:8000/cookie_app/delete_cookie/刪除cookie,瀏覽器頁(yè)面返回刪除cookie成功,接著我們查看網(wǎng)站的cookie信息查看會(huì)發(fā)現(xiàn)username的值為空,如下圖


為什么會(huì)設(shè)置為空?我們可以查看delete_cookie方法的源碼,如下

def delete_cookie(self, key, path='/', domain=None):
    # Most browsers ignore the Set-Cookie header if the cookie name starts
    # with __Host- or __Secure- and the cookie doesn't use the secure flag.
    secure = key.startswith(('__Secure-', '__Host-'))
    self.set_cookie(
        key, max_age=0, path=path, domain=domain, secure=secure,
        expires='Thu, 01 Jan 1970 00:00:00 GMT',
    )

可以看到,它里面其實(shí)是調(diào)用了set_cookie方法,然后沒(méi)有給value賦值,默認(rèn)就為''空字符串,然后設(shè)置max_age為0,代表過(guò)期時(shí)間就是現(xiàn)在,立馬就過(guò)期

到此這篇關(guān)于Django操作cookie的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Django操作cookie內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 淺談Servlet的Cookie和Session機(jī)制
  • 詳解操作cookie的原生方法cookieStore
  • Python Selenium操作Cookie的實(shí)例方法
  • Cookie 實(shí)現(xiàn)的原理

標(biāo)簽:成都 蘭州 宿遷 六盤(pán)水 山東 常州 駐馬店 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Django操作cookie的實(shí)現(xiàn)》,本文關(guān)鍵詞  Django,操作,cookie,的,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Django操作cookie的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Django操作cookie的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    许昌市| 南溪县| 罗源县| 孟村| 古浪县| 拉萨市| 横山县| 万荣县| 武清区| 车致| 怀化市| 东丰县| 施甸县| 周宁县| 衡水市| 莎车县| 长沙市| 房产| 东乌珠穆沁旗| 兴安县| 武胜县| 英超| 若羌县| 伊宁县| 湛江市| 重庆市| 东平县| 修武县| 海门市| 玛曲县| 武定县| 桃源县| 连江县| 舒城县| 缙云县| 龙陵县| 云阳县| 娱乐| 鄂尔多斯市| 兴义市| 二手房|