更新時間:2021年09月14日16時21分 來源:傳智教育 瀏覽次數(shù):
Cookie,有時也用其復(fù)數(shù)形式Cookies,指某些網(wǎng)站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。Cookie最早是網(wǎng)景公司的前雇員Lou Montulli在1993年3月的發(fā)明。Cookie是由服務(wù)器端生成,發(fā)送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內(nèi),下次請求同一網(wǎng)站時就發(fā)送該Cookie給服務(wù)器(前提是瀏覽器設(shè)置為啟用cookie)。Cookie名稱和值可以由服務(wù)器端開發(fā)自己定義,這樣服務(wù)器可以知道該用戶是否合法用戶以及是否需要重新登錄等。服務(wù)器可以利用Cookies包含信息的任意性來篩選并經(jīng)常性維護這些信息,以判斷在HTTP傳輸中的狀態(tài)。Cookies最典型的應(yīng)用是判定注冊用戶是否已經(jīng)登錄網(wǎng)站,用戶可能會得到提示,是否在下一次進入此網(wǎng)站時保留用戶信息以便簡化登錄手續(xù),這些都是Cookies的功用。另一個重要應(yīng)用場合是“購物車”之類處理。用戶可能會在一段時間內(nèi)在同一家網(wǎng)站的不同頁面中選擇不同的商品,這些信息都會寫入Cookies,以便在最后付款時提取信息。
Cookie是存儲在瀏覽器中的一段純文本信息,建議不要存儲敏感信息如密碼,因為電腦上的瀏覽器可能被其他人使用。
Cookie以鍵值對的格式進行信息的存儲。
Cookie基于域名安全,不同域名的Cookie是不能互相訪問的,如訪問itcast.cn時向瀏覽器中寫了Cookie信息,使用同一瀏覽器訪問baidu.com時,無法訪問到itcast.cn寫的Cookie信息。
當(dāng)瀏覽器請求某網(wǎng)站時,會將本網(wǎng)站下所有Cookie信息提交給服務(wù)器。
典型應(yīng)用:記住用戶名,網(wǎng)站的廣告推送。
說明:點擊示例網(wǎng)址,這些廣告推送的商品是基于你曾經(jīng)在淘寶上點擊的商品類別等條件篩選出來的,看上去這是在鳳凰網(wǎng)上訪問淘寶網(wǎng)的Cookie,但是事實不是這樣的,一般是采用iframe標(biāo)簽嵌套一個淘寶的廣告頁面到鳳凰網(wǎng)的頁面上,所以淘寶的Cookie并沒有被鳳凰網(wǎng)讀取到,而是依然交給淘寶網(wǎng)讀取的,可以通過“開發(fā)者工具”查看元素,如下圖
接下來講解如何在Django中實現(xiàn)Cookie的讀寫
設(shè)置Cookie
打開booktest/views.py文件,創(chuàng)建視圖cookie_set
def cookie_set(request): response = HttpResponse("<h1>設(shè)置Cookie,請查看響應(yīng)報文頭</h1>") response.set_cookie('h1', '你好') return response
打開booktest/urls.py文件,配置url
url(r'^cookie_set/$',views.cookie_set),
在瀏覽器輸入如下網(wǎng)址
http://127.0.0.1:8000/cookie_set/
在“開發(fā)者工具”中可以在響應(yīng)頭中查看到設(shè)置的Cookie信息
Cookie信息被包含在請求頭中,使用request對象的COOKIES屬性訪問打開booktest/views.py文件,創(chuàng)建視圖cookie_get
def cookie_get(request): response = HttpResponse("讀取Cookie,數(shù)據(jù)如下:<br>") if request.COOKIES.has_key('h1'): response.write('<h1>' + request.COOKIES['h1'] + '</h1>') return response
打開booktest/urls.py文件,配置url
url(r'^cookie_get/$',views.cookie_get),
在瀏覽器輸入如下網(wǎng)址
http://127.0.0.1:8000/cookie_get/
打開“開發(fā)者工具”,在請求頭中可以查看Cookie信息,瀏覽效果如下圖
為什么禁用cookie后session也不能用了?怎么解決?