第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Django 入門教程

課程導(dǎo)學(xué)
Django 慕課教程使用指南
Django開發(fā)實(shí)戰(zhàn)
35 開發(fā)實(shí)戰(zhàn)

Session 和 Cookie 的概念

現(xiàn)在正式進(jìn)入第四部分學(xué)習(xí),作為開頭部分,我們首先要介紹下 Web 框架中常用到的 Cookie 和 Session 的概念。在了解了這些基礎(chǔ)知識(shí)后,我們就可以學(xué)習(xí) Django 中是如何使用 Cookie 和 Session 幫我們完成一些簡單的必要功能。話不多說,現(xiàn)在就開始吧!

1. 為什么需要Cookie和Session?

在 Web 程序中,對(duì)會(huì)話的跟蹤是很一件非常重要的事情。通常,一個(gè)用戶的所有請(qǐng)求操作都應(yīng)該屬于同一個(gè)會(huì)話,而另一個(gè)用戶的所有請(qǐng)求操作則應(yīng)該屬于另一個(gè)會(huì)話,二者不能互不干擾。然而大部分的 Web 應(yīng)用程序都是使用HTTP 協(xié)議傳輸數(shù)據(jù)的。HTTP協(xié)議是無狀態(tài)的協(xié)議。一旦數(shù)據(jù)交換完畢,客戶端與服務(wù)器端的連接就會(huì)關(guān)閉,再次交換數(shù)據(jù)需要建立新的連接。這就意味著服務(wù)器無法從連接上跟蹤會(huì)話。如果 Web 服務(wù)上沒有這種的會(huì)話追蹤功能,那么大部分網(wǎng)站都會(huì)陷入一片混亂。特別是對(duì)于電商網(wǎng)站而言,如果我添加一次購物車就需要登錄一次確認(rèn)身份,那對(duì)于用戶體驗(yàn)而言是糟糕透的。會(huì)話(Session)跟蹤是 Web 程序中常用的技術(shù),用來跟蹤用戶的整個(gè)會(huì)話。常用的會(huì)話跟蹤技術(shù)是Cookie與Session。Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務(wù)器端記錄信息確定用戶身份。正是有了 Cookie 和 Session 這樣的會(huì)話跟蹤技術(shù),彌補(bǔ)了 HTTP 協(xié)議無狀態(tài)的不足,才使得我們可以無差別的訪問網(wǎng)站,即只需要一次登錄,后續(xù)所有的操作通過 Cookie 或者 Session 便能自動(dòng)識(shí)別為該用戶,并維持在一個(gè)會(huì)話中。

2.1 什么是Cookie?

前面已經(jīng)介紹了,Cookie 是一種會(huì)話跟蹤技術(shù),且將用戶信息記錄在客戶端,通常是我們自己電腦上的某個(gè)位置,這個(gè)位置是固定的,和使用的瀏覽器有關(guān)。目前Cookie已經(jīng)成為標(biāo)準(zhǔn),所有的主流瀏覽器如 IE、Netscape、Firefox、Opera 以及 Chrome 等都是支持 Cookie 的。

Cookie 實(shí)際上是一小段的文本信息。客戶端請(qǐng)求服務(wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個(gè) Cookie??蛻舳藶g覽器會(huì)把 Cookie 保存起來。當(dāng)瀏覽器再請(qǐng)求該網(wǎng)站時(shí),瀏覽器把請(qǐng)求的網(wǎng)址連同該 Cookie 一同提交給服務(wù)器。服務(wù)器檢查該 Cookie,以此來辨認(rèn)用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改 Cookie 的內(nèi)容。

現(xiàn)在我們?cè)L問下慕課網(wǎng),然后進(jìn)行登錄,登錄之后我們所有在慕課網(wǎng)中的操作都會(huì)帶上這個(gè) Cookie 去請(qǐng)求后端服務(wù),這樣后端服務(wù)通過 Cookie 就能識(shí)別請(qǐng)求的用戶。參考下面兩個(gè)圖,第二個(gè)是 Cookie 的真實(shí)位置,它是放到請(qǐng)求頭部中的,具體內(nèi)容是用逗號(hào)分隔的 key=value 形式。

圖片描述

圖片描述

此外, 我們?cè)谇岸苏{(diào)試工具頁面中選擇 Console Tab 頁面,輸入一行 js 代碼就能拿到對(duì)方網(wǎng)站發(fā)給我們的 cookie值:

圖片描述

2.2 Cookie的特點(diǎn)

Cookie 有如下特點(diǎn):

不可跨域名性

這個(gè)是 Cookie 非常重要的一個(gè)特點(diǎn),域名限制。表示 A 網(wǎng)站頒發(fā)的 Cookie 在用戶訪問 B 網(wǎng)站時(shí)并不會(huì)被提交到 B 網(wǎng)站上去,這些都是由 Cookie 規(guī)范確定。此外,W3C 標(biāo)準(zhǔn)還禁止了 JavaScript 讀寫任何不屬于自己網(wǎng)站的 Cookie;

時(shí)間限制

Cookie 同樣有著自己的生命周期,其 maxAge 值決定著 Cookie 的有效期,單位為秒。如果maxAge 屬性為正,則表示該 Cookie 會(huì)在 maxAge 秒之后自動(dòng)失效。瀏覽器會(huì)將 maxAge 為正數(shù)的 Cookie持久化,即寫到對(duì)應(yīng)的 Cookie 文件中。無論客戶關(guān)閉了瀏覽器還是電腦,只要還在 maxAge 秒之前,登錄網(wǎng)站時(shí)該 Cookie 仍然有效;如果 maxAge 為負(fù)數(shù),則表示該 Cookie 僅在本瀏覽器窗口以及本窗口打開的子窗口內(nèi)有效,關(guān)閉窗口后該 Cookie 即失效。maxAge 為負(fù)數(shù)的 Cookie,為臨時(shí)性 Cookie,不會(huì)被持久化,不會(huì)被寫到 Cookie 文件中。Cookie 信息保存在瀏覽器內(nèi)存中,因此關(guān)閉瀏覽器該 Cookie 就消失了。Cookie 默認(rèn)的 maxAge 值為–1;而如果 maxAge 為0,則表示刪除該 Cookie。Cookie 機(jī)制沒有提供刪除 Cookie 的方法,因此通過設(shè)置該 Cookie 即時(shí)失效實(shí)現(xiàn)刪除 Cookie 的效果。失效的 Cookie 會(huì)被瀏覽器從 Cookie 文件或者內(nèi)存中刪除;

  • 空間限制:Cookie 只能存儲(chǔ)4-10KB;
  • 數(shù)量限制:一般而言,每個(gè)域下最多不能超過50個(gè) Cookie
  • 存儲(chǔ)數(shù)據(jù)類型限制:Cookie只能存儲(chǔ)字符串

從上面這些特點(diǎn),我們也能發(fā)現(xiàn)使用 Cookie 的一些缺點(diǎn)。使用 Cookie 最大的問題就是安全性,因?yàn)?Cookie 是保存在客戶端的,且每次發(fā)送 HTTP 請(qǐng)求都會(huì)將 Cookie 帶過去。這些都導(dǎo)致 Cookie 很容易泄露出去,如果一旦 Cookie 泄露,且 Cookie 中設(shè)置的時(shí)間較長,那么很可能攻擊者拿著這個(gè) Cookie 就能冒充受害者的身份去做一些事情,最后留下的記錄都是受害者的。然而接下來的 Session 在某種程度上避免了這一類的問題。

3. Session

3.1 什么是Session?

Session 是另一種記錄客戶狀態(tài)的機(jī)制,不同于 Cookie 保存在客戶端瀏覽器中,Session 數(shù)據(jù)時(shí)保存在服務(wù)器上。瀏覽器訪問服務(wù)器的時(shí),服務(wù)器會(huì)把客戶端信息以某種形式記錄在服務(wù)器上,這些數(shù)據(jù)就是 Session??蛻舳藶g覽器再次訪問時(shí)只需要從該 Session 中查找該客戶的狀態(tài)就可以了。

Cookie 機(jī)制是通過檢查客戶身上的“通行證”來確定客戶身份,Session 機(jī)制是通過檢查服務(wù)器上的“客戶明細(xì)表”來確認(rèn)客戶身份。Session 相當(dāng)于程序在服務(wù)器上建立的一份客戶檔案,客戶來訪的時(shí)候只需要查詢客戶檔案表就可以了。

當(dāng)多個(gè)客戶端執(zhí)行程序時(shí),服務(wù)器會(huì)保存多個(gè)客戶端的 Session。獲取 Session 的時(shí)候也不需要聲明獲取誰的Session。Session 機(jī)制決定了當(dāng)前客戶只會(huì)獲取到自己的 Session,而不會(huì)獲取到別人的 Session。各客戶的Session 也彼此獨(dú)立,互不可見。

Session 的使用雖然比 Cookie 方便許多,但是過多的 Session 存儲(chǔ)在服務(wù)器內(nèi)存中,會(huì)對(duì)服務(wù)器造成壓力。

3.2 Session的生命周期

這里我們談?wù)?Session 的生命周期,和 Cookie 有所不同。首先 Session 保存在服務(wù)器端,為了獲得更高的存取速度,服務(wù)器一般把Session放在內(nèi)存里。Session 會(huì)在用戶第一次訪問服務(wù)器的時(shí)候自動(dòng)創(chuàng)建。Session 生成后,只要用戶繼續(xù)訪問,服務(wù)器就會(huì)更新 Session 的最后訪問時(shí)間,并維護(hù)該 Session。用戶每訪問服務(wù)器一次,無論是否讀寫 Session,服務(wù)器都認(rèn)為該用戶的 Session “活躍”了一次。

由于會(huì)有越來越多的用戶訪問服務(wù)器,因此 Session 也會(huì)越來越多。為防止內(nèi)存溢出,服務(wù)器會(huì)把長時(shí)間內(nèi)沒有活躍的 Session 從內(nèi)存刪除。這個(gè)時(shí)間就是 Session 的超時(shí)時(shí)間。如果超過了超時(shí)時(shí)間沒訪問過服務(wù)器,Session 就自動(dòng)失效了。

介紹完了 Cookie 和 Session 之后,我們現(xiàn)在來看看二者的區(qū)別,當(dāng)然最大的區(qū)別前面已經(jīng)反復(fù)強(qiáng)調(diào)過了:

  • Cookie 數(shù)據(jù)存放在客戶的瀏覽器上,Session 數(shù)據(jù)放在服務(wù)器上;
  • 上面的區(qū)別也導(dǎo)致了 Cookie 和 Session 之間安全性的差別。Cookie 數(shù)據(jù)保存在用戶端,數(shù)據(jù)容易被竊取,不太安全。雖然對(duì) Cookie 中的敏感信息加密可以暫時(shí)規(guī)避安全風(fēng)險(xiǎn),但即使加密數(shù)據(jù)被泄露了總歸是不好的;Session 數(shù)據(jù)存儲(chǔ)在服務(wù)器,可以有效規(guī)避信息泄露問題;
  • Cookie 和 Session 之間生命周期不同,具體可以看前面兩個(gè)的介紹;
  • 單個(gè) Cookie 保存的數(shù)據(jù)不能超過4K,很多瀏覽器都會(huì)限制一個(gè)站點(diǎn)最多保存20個(gè) Cookie,且只能保存字符串內(nèi)容;對(duì)于 Session 則沒多少限制,Session 可以保存復(fù)雜的數(shù)據(jù)類型,而且數(shù)量沒有限制,主要是訪問用戶太多后,容易造成服務(wù)器內(nèi)存溢出。

4. 小結(jié)

本小節(jié)中我們?cè)敿?xì)介紹了 Cookie 和 Session 中的一些基本概念以及各自的優(yōu)缺點(diǎn)。在了解了這些基礎(chǔ)知識(shí)后,我們就可以在 Django 中操作 Cookie 和 Session 了。