2011-05-21 33 views
3

在表單中,我使用HTTP POST請求將數據提交給python webapp處理程序(所有基於Google App Engine的處理程序)。在這個腳本中,我首先檢查用戶是否已登錄,如果沒有,我使用users.create_login_url(...)將用戶首先重定向到登錄頁面。在GAE中登錄重定向期間保留POST變量?

我該如何確保在登錄後用戶不會再次轉發到我的python腳本,但是POST變量也會保留下來?我發現的唯一方法是將所有POST變量轉換爲URL參數並將其添加到URL中。

這可能嗎?

回答

2

通常,我會將它存儲在會話變量中。我之前使用過gae-sessions,發現很簡單。它堅持到數據存儲區和memcaches後面的速度。看起來是這樣的:

from gaesessions import get_current_session 
session = get_current_session() 
if session.is_active(): 
    c = session.get('counter', 0) 
    session['counter'] = c + 1 
    session['blah'] = 325 
    del session.blah # remove 'blah' from the session 

或者你可以將所有HTML5y和使用localStorage

+0

是的,我可以使用會話。我只是希望能解決這個問題,因爲我沒有在其他地方使用會話。但你可能是對的,這是做到這一點的唯一方法。讓我們看看是否有其他人有另一個想法:-) – Sebi 2011-05-21 20:21:24

1

捕獲POST並將其轉換爲GET的一般問題首先是GET上的查詢字符串具有依賴於瀏覽器的受限大小,其次POST可能是form/multi-part(要做什麼與上傳的文件成爲一個問題)。

一種可能適用於您的方法是接受POST並保存數據,然後重定向到需要登錄的頁面,並在查詢字符串中傳遞Key(或足夠的信息以重新構建它們)。該URL的處理程序然後假定成功登錄,並根據需要修復保存的數據(例如,將其與登錄用戶相關聯)。

決定不登錄的人會留下孤立的記錄,您可以通過cron作業進行清理。

+0

是的,這基本上是一個自定義的會話處理。我想我會堅持@hyperslug所描述的更正式的方法。無論如何,感謝分享! – Sebi 2011-05-21 21:52:48

+1

@Sebi與使用會話相比,優勢在於您不需要專用庫,也不會存放隨後隨後回覆的cookie,並且知道何時可以刪除存儲的數據並釋放空間。如果這是你需要的,我會在常規會議上選擇這個選項。只要確保使用難以猜測的密鑰名稱,例如guid。 – 2011-05-22 18:58:17

+0

是的,沒有添加另一個庫到堆棧定義爲您的解決方案的一大優點。但我仍然需要創建某種標識符並將其作爲參數添加到URL中,或將其設置爲Cookie。或者你會怎麼做? – Sebi 2011-05-23 05:38:43

相關問題