国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Python的Django框架中的Cookie相關(guān)處理

2020-01-04 18:00:02
字體:
供稿:網(wǎng)友

這篇文章主要介紹了詳解Python的Django框架中的Cookie相關(guān)處理,Cookie存儲是每個(gè)開發(fā)框架都會著重注意的重要功能,需要的朋友可以參考下

瀏覽器的開發(fā)者在很早的時(shí)候就已經(jīng)意識到, HTTP's 的無狀態(tài)會對Web開發(fā)者帶來很大的問題,于是(cookies)應(yīng)運(yùn)而生。 cookies 是瀏覽器為 Web 服務(wù)器存儲的一小段信息。 每次瀏覽器從某個(gè)服務(wù)器請求頁面時(shí),它向服務(wù)器回送之前收到的cookies

來看看它是怎么工作的。 當(dāng)你打開瀏覽器并訪問 google.com ,你的瀏覽器會給Google發(fā)送一個(gè)HTTP請求,起始部分就象這樣:

 

 
  1. GET / HTTP/1.1 
  2. Host: google.com 
  3. ... 

當(dāng) Google響應(yīng)時(shí),HTTP的響應(yīng)是這樣的:

 

 
  1. HTTP/1.1 200 OK 
  2. Content-Type: text/html 
  3. Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671; 
  4. expires=Sun, 17-Jan-2038 19:14:07 GMT; 
  5. path=/; domain=.google.com 
  6. Server: GWS/2.1 
  7. ... 

注意 Set-Cookie 的頭部。 你的瀏覽器會存儲cookie值( PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671 ) ,而且每次訪問google 站點(diǎn)都會回送這個(gè)cookie值。 因此當(dāng)你下次訪問Google時(shí),你的瀏覽器會發(fā)送像這樣的請求:

 

 
  1. GET / HTTP/1.1 
  2. Host: google.com 
  3. Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671 
  4. ... 

于是 Cookies 的值會告訴Google,你就是早些時(shí)候訪問過Google網(wǎng)站的人。 這個(gè)值可能是數(shù)據(jù)庫中存儲用戶信息的key,可以用它在頁面上顯示你的用戶名。 Google會(以及目前)使用它在網(wǎng)頁上顯示你賬號的用戶名。

存取Cookies

在Django中處理持久化,大部分時(shí)候你會更愿意用高層些的session 和/或 后面要討論的user 框架。 但在此之前,我們需要停下來在底層看看如何讀寫cookies。 這會幫助你理解本章節(jié)后面要討論的工具是如何工作的,而且如果你需要自己操作cookies,這也會有所幫助。

讀取已經(jīng)設(shè)置好的cookies極其簡單。 每一個(gè)`` HttpRequest`` 對象都有一個(gè)`` COOKIES`` 對象,該對象的行為類似一個(gè)字典,你可以使用它讀取任何瀏覽器發(fā)送給視圖(view)的cookies。

 

 
  1. def show_color(request): 
  2. if "favorite_color" in request.COOKIES: 
  3. return HttpResponse("Your favorite color is %s" % request.COOKIES["favorite_color"]) 
  4. else
  5. return HttpResponse("You don't have a favorite color."

寫cookies稍微復(fù)雜點(diǎn)。 你需要使用 HttpResponse對象的 set_cookie()方法。 這兒有個(gè)基于 GET 參數(shù)來設(shè)置 favorite_color

cookie的例子:

 

 
  1. def set_color(request): 
  2. if "favorite_color" in request.GET: 
  3.  
  4. # Create an HttpResponse object... 
  5. response = HttpResponse("Your favorite color is now %s" % request.GET["favorite_color"]) 
  6.  
  7. # ... and set a cookie on the response 
  8. response.set_cookie("favorite_color"
  9. request.GET["favorite_color"]) 
  10.  
  11. return response 
  12.  
  13. else
  14. return HttpResponse("You didn't give a favorite color."

你可以給 response.set_cookie() 傳遞一些可選的參數(shù)來控制cookie的行為

好壞參半的Cookies

也許你已經(jīng)注意到了,cookies的工作方式可能導(dǎo)致的問題。 讓我們看一下其中一些比較重要的問題:

cookie的存儲是自愿的,一個(gè)客戶端不一定要去接受或存儲cookie。 事實(shí)上,所有的瀏覽器都讓用戶自己控制 是否接受cookies。 如果你想知道cookies對于Web應(yīng)用有多重要,你可以試著打開這個(gè)瀏覽器的 選項(xiàng):

盡管cookies廣為使用,但仍被認(rèn)為是不可靠的的。 這意味著,開發(fā)者使用cookies之前必須 檢查用戶是否可以接收cookie。

Cookie(特別是那些沒通過HTTPS傳輸?shù)?是非常不安全的。 因?yàn)镠TTP數(shù)據(jù)是以明文發(fā)送的,所以 特別容易受到嗅探攻擊。 也就是說,嗅探攻擊者可以在網(wǎng)絡(luò)中攔截并讀取cookies,因此你要 絕對避免在cookies中存儲敏感信息。 這就意味著您不應(yīng)該使用cookie來在存儲任何敏感信息。

還有一種被稱為”中間人”的攻擊更陰險(xiǎn),攻擊者攔截一個(gè)cookie并將其用于另一個(gè)用戶。 第19章將深入討論這種攻擊的本質(zhì)以及如何避免。

即使從預(yù)想中的接收者返回的cookie也是不安全的。 在大多數(shù)瀏覽器中您可以非常容易地修改cookies中的信息。有經(jīng)驗(yàn)的用戶甚至可以通過像mechanize(http://wwwsearch.sourceforge.net/mechanize/) 這樣的工具手工構(gòu)造一個(gè)HTTP請求。

因此不能在cookies中存儲可能會被篡改的敏感數(shù)據(jù)。 在cookies中存儲 IsLoggedIn=1 ,以標(biāo)識用戶已經(jīng)登錄。 犯這類錯(cuò)誤的站點(diǎn)數(shù)量多的令人難以置信; 繞過這些網(wǎng)站的安全系統(tǒng)也是易如反掌。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 屏边| 陆丰市| 嫩江县| 巴东县| 东平县| 香河县| 青铜峡市| 潢川县| 新闻| 谢通门县| 鄂托克前旗| 乃东县| 视频| 文登市| 宜阳县| 宽甸| 奎屯市| 潼关县| 青川县| 莱芜市| 永登县| 和田县| 鲁甸县| 马鞍山市| 景东| 西青区| 武陟县| 甘德县| 抚松县| 唐河县| 千阳县| 盐亭县| 洛扎县| 恩施市| 林州市| 响水县| 车致| 长阳| 克拉玛依市| 陆良县| 六安市|