2009-10-01 69 views
2

在我的django應用程序中,我按以下方式處理登錄。用戶轉到網關頁面(index.html) - 如果他們當前沒有登錄,則會有一個登錄名/密碼錶格以及其他材料。成功登錄(或者如果他們以其他方式登錄時進入該頁面),頁面呈現略微不同(無登錄表單)。Django會話剛剛登錄後會間歇性消失

我處理這件事的方法是在視圖中的index.html我做的:

logged_in = request.user.is_authenticated() 

,然後logged_in變量傳遞給模板,進行檢查,看網頁它的哪個版本渲染。

當用戶登錄時,登錄查看來電:

user = authenticate(username=username, password=password) 
if user is not none: 
    login(request, user) 

然後,他們將被重定向回的index.html。

通常情況下,這很好。我所看到的是,有時在HttpResponseRedirect和索引視圖之間是request.user被清除。我已經記錄了一段時間,寫入日誌作爲登錄視圖中的最後一項和索引視圖中的第一項。它對用戶的影響是,它看起來像他們錯誤地登錄(除了沒有消息告訴他們)。

它看起來好像爆發了,因爲在系統中會好一段時間,然後我會看到它發生在連續4-5次的用戶身上。我還應該注意到,我從來沒有見過/聽說過任何點發生這種情況,除了在登錄,據我所知(它可能發生了,沒有人抱怨),一旦他們在,他們在。

我在做我的登錄方法在這裏顯然不對嗎?

+1

您是否啓用了緩存? – 2009-10-01 15:16:55

+0

我沒有啓用服務器端緩存。我已經看到了現在,然後在哪裏我需要使用never_cache裝飾器來避免客戶端緩存,但這似乎並不是這種情況(或可以嗎?) – geoffjentry 2009-10-01 17:02:13

+0

我還應該注意,我從來沒有看到這個使用開發服務器,只有apache瓦特/ mod_python – geoffjentry 2009-10-01 17:12:45

回答

1

Apache + Mod Python或WSGI使用線程並可能預先緩存您的請求(取決於您的conf)。所以如果你在代碼中改變了某些東西,你必須重新啓動你的apache。那麼問題應該消失。

+0

這是我想到的一件事(並重新啓動服務器似乎修復它,如果它變得非常糟糕),但這將發生在服務器尚未被觸及(代碼明智的)在幾周內。是否有可能關閉Apache/mod_python的請求緩存和/或明智的做法?這是一個相當低的網站,所以速度的角度在這裏沒什麼大不了的。 – geoffjentry 2009-10-02 13:58:29