Karrigell/設定、讀取和刪除 Cookie
外觀
Cookie 由指令碼中可用的兩個變數管理
COOKIE是一個類似字典的物件,它儲存瀏覽器傳送的並由指令碼接收的 CookieSET_COOKIE是一個類似字典的物件,由指令碼用來設定 Cookie 值、路徑、過期日期等,並將它們傳送到瀏覽器
這是一個簡單的指令碼 cookies.py,它展示瞭如何設定、讀取和刪除 Cookie
def index(**kw):
body = 'Received cookies'
for cookie in COOKIE:
body += BR()+B(cookie)+' '+COOKIE[cookie].value
body += A('Erase',href="erase?name=%s" %cookie)
form = FORM(action ="set_cookie",method="post")
form <= 'Name'+INPUT(name="name")+BR()
form <= 'Value' + INPUT(name="value")+BR()
form <= INPUT(Type="submit",value="Ok")
return HTML(BODY(body+form))
def set_cookie(name,value):
SET_COOKIE[name] = value
SET_COOKIE[name]['path'] = '/'
raise HTTP_REDIRECTION('index')
def cookie_expiry_date(numdays):
""" Returns a cookie expiry date in the required format.
`expires` should be a string in the format "Wdy, DD-Mon-YY HH:MM:SS GMT"
"""
from datetime import date, timedelta
new = date.today() + timedelta(days = numdays)
return new.strftime("%a, %d-%b-%Y 23:59:59 GMT")
def erase(name):
SET_COOKIE[name] = ''
SET_COOKIE[name]['path'] = '/'
SET_COOKIE[name]['expires'] = cookie_expiry_date(-10)
SET_COOKIE[name]['max-age'] = 0
raise HTTP_REDIRECTION('index')
在 index() 中,會列印瀏覽器傳送的 Cookie。然後,一個表單允許使用者設定另一個 Cookie,並指定其名稱和值
此表單提交到函式 set_cookie(name,value)。在此函式中,會在 SET_COOKIE 中建立新條目,包含提交的資料。此條目的鍵“path”設定為伺服器根目錄。然後,會重定向到 index() 函式
完成此重定向後,新建立的 Cookie 會被髮送到瀏覽器。瀏覽器會儲存其值和屬性;然後,它會向 URL http://host/cookies.py/index 傳送請求
傳送此請求時,請求頭會包含此 Cookie,指令碼會在 COOKIE 變數中接收到它:因此,Cookie 名稱和值會在頁面的頂部打印出來
要刪除 Cookie,會提供一個連結,指向函式 erase(name),其中 name 是 Cookie 名稱。函式 erase() 使用 SET_COOKIE 刪除值,並將過期日期設定為過去(今天之前 10 天),使用 cookie_expiry_date() 函式將日期時間物件轉換為 Cookie 規範支援的格式
最後,當這些值設定好後,會執行另一個重定向到 index():瀏覽器會收到關於指定 Cookie 的新資訊。由於過期日期已到,它會刪除它。當它向 http://host/cookies.py/index 傳送請求時,它不會發送此 Cookie 的標頭,因此它不會出現在收到的 Cookie 列表中