一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 詳解Python中的Cookie模塊使用

詳解Python中的Cookie模塊使用

2020-07-19 10:53DarkBull Python

這篇文章主要介紹了詳解Python中的Cookie模塊使用,是Python入門學習中的基礎知識,需要的朋友可以參考下

最近在用GAE開發自己的博客程序。雖然GAE的API沒有顯式的提供操作Cookie的方法,但他現有的架構,使我們有足夠的自由來操作Cookie。

Cookie 模塊,顧名思義,就是用來操作Cookie的模塊。Cookie這塊小蛋糕,玩過Web的人都知道,它是Server與Client保持會話時用到的信息 切片。 Http協議本身是無狀態的,也就是說,同一個客戶端發送的兩次請求,對于Web服務器來說,沒有直接的關系。既然這樣,有人會問,既然Http是無狀態 的, 為什么有些網頁,只有輸入了用戶名與密碼通過驗證之后才可以訪問?那是因為:對于通過身份驗證的用戶,Server會偷偷的在發往Client的數據中添 加 Cookie,Cookie中一般保存一個標識該Client的唯一的ID,Client在接下來對服務器的請求中,會將該ID以Cookie的形式一并 發往Server,Server從回傳回來的Cookie中提取ID并與相應的用戶綁定起來,從而實現身份驗證。說白了,Cookie就是一個在服務器與客戶端之間相互傳遞的字符串(下圖通過FireFox的FireBug插件查看訪問google.com時的Cookie)。 越扯越遠了,回到我們的主題:Python標準模塊 — Cookie。

詳解Python中的Cookie模塊使用

(上圖是Http請求頭中的Cookie信息)

詳解Python中的Cookie模塊使用

(上圖是Http響應中的Cookie信息)
Cooke模塊中定義了4個直接操作Cookie的類:BaseCookie、SimpleCookie、SerialCookie、 SmartCookie。其中,BaseCookie是基類,定義了操作Cookie的公共部分,其他3個類都繼承自BaseCookie,它們之間的區 別僅僅在于序列化數據的方式不同。下面簡單講解這些類的使用。

BaseCookie基類: BaseCookies的行為非常像dict,可以用鍵/值對的形式來操作它,但是kye必須是字符串,value是Morsel對象 (下面會講到Morsel)。BaseCookies定義了編碼/解碼,輸入/輸出操作的公共規范:

BaseCookie.value_encode(val):對數據進行序列化/反序列化。這些方法都返回字符串,以便通過Http傳輸。

BaseCookie.output():返回字符串,該字符串可以作為Http響應頭發往客戶端。

BaseCookie.js_output():返回嵌入js腳本的字符串,瀏覽器通過執行該腳本,就可以得到cooke數據。

BaseCookie.load(newdata):解析字符串為Cookie數據。

SimpleCookie、SerialCookie、SmartCookie都繼承自BaseCookie,具有一致的行為,它們各自對 BaseCookie的value_decode, value_encode進行了重寫并實現自己的序列化/反序列化策略,其中:

  •     SimpleCookie內部使用str()來對數據進行序列化;
  •     SerialCookie則通過pickle模塊來序列化反序列化數據;
  •     SmartCookie相對聰明點,對于非字符串數據,使用pickle序列/反序列化,否則將字符串原樣返回。

下面的例子簡單的說明如何使用Cookie模塊:
 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import Cookie
 
c = Cookie.SimpleCookie()
c['name'] = 'DarkBull'
c['address'] = 'ChinaHangZhou'
c['address']['path'] = '/'
# 路徑
c['address']['domain'] = 'appspot.com'
# domain
c['address']['expires'] = 'Fir, 01-Oct-2010 20:00:00 GMT'
# 過期時間
print c.output()
print c.js_output()
 
# 輸出結果,與上圖對照
# Set-Cookie: address=ChinaHangZhou; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00 GMT; Path=/
# Set-Cookie: name=DarkBull
 
# 作為腳本輸出
# <script type="text/javascript">
# document.cookie = "address=ChinaHangZhou; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00 GMT; Path=/";
# </script>
 
# <script type="text/javascript">
# document.cookie = "name=DarkBull";
# </script>

Morsel類 : 用于表示Cookie中每一項數據的屬性而抽象的類。這些屬性包括:expires, path, comment, domain, max-age, secure, version等等(看上圖下劃線標注部分)。如果你玩過web,對這些應該不會陌生,可以在RCF2109中找到他們的具體定義

Morsel.key,Morsel.value:Cookie數據項的key/value(value可以是二進制數據);

Morsel.coded_value:數據編碼后得到的字符串。Http協議是基于文本的協議,Server無法直接向Client發送二進制數據,只有序列化成字符串后,才能發往Client;

Morsel.set(key, value, coded_value):設置Cookie數據項的key、value、coded_value;

Morsel.isReversvedKey(key):如果key是expires, path, comment, domain, max-age, secure, version, httponly中的一個,返回True,否則返回False;

Morsel.output():返回型如“Set-Cookie: …”的字符串,表示一個Cookie數據項;

Morsel.js_output():返回Cookie數據項的腳本字符串;

Morsel.OutputString(): 返回Morsel的字符串表示;

Morsel使用示例:
 

?
1
2
3
4
5
6
7
8
9
10
import Cookie
 
m = Cookie.Morsel()
m.set('name', 'DarkBull', 'DarkBull')
m['expires'] = 'Fir, 01-Oct-2010 20:00:00 GMT'
m['domain'] = 'appspot.com'
print m.output()
 
# 結果
# Set-Cookie: name=DarkBull; Domain=appspot.com; expires=Fir, 01-Oct-2010 20:00:00

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲色图色 | 国产综合亚洲欧美日韩一区二区 | 国产一卡二卡3卡4卡更新 | 精品国产成人高清在线 | 久久久伊人影院 | 日韩一级免费毛片 | 动漫美女胸被狂揉扒开吃奶动态图 | 亚洲成在人线久久综合 | 国产欧美久久一区二区 | 99在线观看视频免费精品9 | 亚洲精品一二区 | 日本一二线不卡在线观看 | 日韩网站在线观看 | 4hu影院在线观看 | 隔壁老王国产在线精品 | xxx黑人又大粗又长 xxxx性欧美极品另类 | 久久精品视频uu | 边摸边吃奶玩乳尖视频 | 亚洲国产在线午夜视频无 | 成人免费在线视频观看 | 日本中文字幕在线视频站 | 扒开尿口 | 欧美日韩中文国产一区二区三区 | 91精品国产综合久久精品 | 成人午夜影院在线观看 | 乌克兰粉嫩摘花第一次 | 亚洲国产精品自在自线观看 | 91热爆在线 | h片免费网站 | 单身男女韩剧在线看 | 国产成人+亚洲欧洲 | 亚洲同性男男gay1069 | 精品国产免费观看一区高清 | 狠狠操社区 | 高h细节肉爽文办公室 | 亚洲va久久久久 | 精品久久久久久久久久香蕉 | 婷婷色在线播放 | 嫩草影院永久一二三入口 | 国产婷婷成人久久av免费高清 | 男同巨黄gay小说好爽 |