2011-08-14 30 views
1

聽起來很簡單WSGI餅乾 - 沒有中間件

def create_cookie(): 
     bag = string.ascii_uppercase + string.ascii_lowercase + string.digits 
     cookie = Cookie.SimpleCookie() 
     cookie['sessionid'] = ''.join(random.sample(bag,24)) 
     cookie['sessionid']['expires'] = 600 
     return 'Set-Cookie: ', cookie.output().replace('Set-Cookie: ', '', 1) 

cookie.output()被設置Cookie:會話ID = YmsrvCMFapXk6wAt4EVKz2uU;到期=孫,08月14日2011年21點48分19秒GMT

headers.append(('Content-type', 'text/html')) 
    headers.append(('Content-Length', str(output_len))) 
    headers.append(create_cookie) 

這是我的迴應 ( '200 OK',[( '內容類型', 'text/html的'),(」 ('Set-Cookie','sessionid = YmsrvCMFapXk6wAt4EVKz2uU; expires = Sun,14-Aug-2011 21:48:19 GMT')],'html stuff')

這是我從envirion得到: HTTP_COOKIE:會話ID = YmsrvCMFapXk6wAt4EVKz2uU

,當我點擊我的網頁上其他鏈接,沒有更多的HTTP_COOKIE 使用Chrome開發者控制檯中,我可以看到請求cookie中nd網頁標題包含: Cookie :: sessionid = YmsrvCMFapXk6wAt4EVKz2uU

現在,這讓我困擾了一下。首先爲什麼它有雙重::?我嘗試在create_cookie函數中使用「Set-Cookie」而不是「Set-Cookie:」。這樣做,我從環境中根本沒有得到任何HTTP_COOKIE。

所以在網絡搜索之後,每個人都只是談論中間件(不要建議我用一個 - 我正在這樣做來學習wsgi)......我已經空了。

+0

還沒有基本上 我送:?(「設置Cookie」,「會話ID = YmsrvCMFapXk6wAt4EVKz2uU;到期=孫,08月14日-2011 21:48:19 GMT') 但是得到這個標頭: HTTP_COOKIE::sessionid = hM2YOE5dSsVpa3QIRCLNjfwX 爲什麼額外':'? – Bjorn

+0

哦,我將'expires'更改爲'max-age'10 * 60 * 1000:S - 儘管如此,仍然沒有運氣。 – Bjorn

+0

好的,似乎正確的方法是使用'Set-Cookie'。不是'Set-Cookie' - 現在我得到:HTTP_COOKIE:session = FZ25UL60bQP7yu93cEawtqro – Bjorn

回答

2

看不見的默認行爲FTW ...

經過一番緊張的調試,我注意到下面的請求不包括HTTP_COOKIE使其成爲決定性問題上的實際發送的是我能找到的Cookie中的瀏覽器端否則,瀏覽器。

一些挖掘顯示,默認路徑和域行爲破壞我的努力,/動作/登錄(其中cookie設置)和/顯示/數據(其中cookie未發送的區別是固定的設置路徑,以「/」這種情況下

「耶」