2013-01-03 34 views
7

已經得到令牌正常工作,這是這樣設置的:管理令牌的生命週期與SimpleCookie在Python

session_cookie = SimpleCookie() 
session_cookie['key'] = any_string_value 
session_cookie['key']["Path"] = '/' 

headers = [] 
headers.extend(("set-cookie", morsel.OutputString()) 
    for morsel 
    in session_cookie.values()) 

start_response(status, headers) 

我也能夠讀取該令牌,並提取我需要的信息:

# Get cookies 
cookies = request.get_cookies() 
#  Get current token from cookies 
token = cookies['token'].value 

現在,將過期設置一個cookie最好的方法,我知道有2個可能的密鑰:

  1. 會話cookie的[ 「鑰匙」] [「最大年齡」] =「時間secods」
  2. 會話cookie的[「關鍵」] [「過期」] =

「將來的日期」我怎麼會知道令牌已過期,或者可能是管理過期令牌的最佳方式?

非常感謝!

+0

這是一個令牌從?只是要求... –

+0

令牌是一串格式化的字符,它包含諸如user_id之類的信息。 – PepperoniPizza

+0

啊正常的標記。我雖然是django特有的東西。 –

回答

3

如果令牌在您嘗試獲取時不存在,您可以知道令牌是否已過期。

token = cookies['token'].value #this will not exist 

瀏覽器刪除與小甜餅,一切都在有效期限經過

這種方式在許多實現中甚至可以刪除cookie或例如註銷用戶,但將user_id cookie的過期日期設置爲過去的某個值(例如負數)。

現在據我所知,你需要一個策略來檢測到過期的令牌服務器端,並可以通過雙重驗證來完成。例如,當您讀取令牌時,嘗試爲每個令牌和服務器端存儲唯一標識符,嘗試檢查它是否已過期。用戶也可以操縱他的cookies,因此不要盲目地信任cookie來存儲重要數據或進行任何user_id簡單驗證。

我希望我能幫上忙。

EDIT

rfc2109

最大年齡=Δ-秒 可選。 Max-Age屬性定義了Cookie的使用期限,以秒爲單位。 delta-seconds值是一個十進制非零數字,其爲負數。在經過了三秒鐘秒後,客戶端 應丟棄該cookie。值爲零表示應立即丟棄Cookie 。

而且從wiki http cookies

過期指令告訴瀏覽器時刪除cookie。 衍生自RFC 1123中使用的格式,日期在 表單中指定「Wdy,DD Mon YYYY HH:MM:SS GMT」,[29]指示此cookie將在此日期/時間過期。作爲將Cookie過期作爲絕對日期/時間設置的替代方法,RFC 6265允許使用Max-Age屬性將cookie的到期時間設置爲相對於瀏覽器接收時間爲012秒的時間間隔 秒 Cookie。

我會建議使用max-age,因爲在設置日期等時可以節省一些麻煩。您只需計算間隔。

閱讀更一點我發現,最大年齡不被IE < 9支持和過期也就意味着首選

Max-Age vs Expires

這將有助於;-)

+0

謝謝,我的問題仍然存在,這是我的錯誤不解釋這一點,每次用戶登錄時,它都會收到一個新的令牌。 – PepperoniPizza

+0

但是,你想實現什麼解釋一下你的目標或你的用戶案例場景......。 –

+1

@Jimme凱恩 - 我想他是問如何設置令牌上的到期日期。 –

相關問題