2009-09-02 25 views
12

, o izlenimi altında oldu çağırarak: oturum beş dakika hareketsizlik sonra sona neden olurDjango oturumunun süresi doldu mu? Django'nın belgelerine

request.session.set_expiry(300) 

bir görünümden; Ancak, bu django bagajda yaşadığım davranış değil. Bu yöntemi bir görünümden çağırırsam ve yöntemi aramayan diğer görünümlere göz atarsam, oturum beş dakika içinde sona erer. Beklediğim davranış, yalnızca beş dakika işlem yapılmadığında sona ermişti ve sadece son kullanma tarihinden önce set_expiry'yi tekrar aramadığı için sona ermişti.

Sorgunun, her görünümde set_expiry'yi aramam gerekecek mi? Eğer öyleyse, yardımcı olabilecek bir dekoratör var mı? Bunun katkıda bulunmanın bir parçası olduğunu düşünemiyorum.

sayesinde Pete

cevap

26

bu yöntemlerin yazarı olarak, ben belgeleri bu ilgili çok net olmadığını görebiliriz. Gözlemleriniz doğru: sadece oturumun değiştirilmesine neden olan talepler "etkinlik" olarak kabul edilir.

SESSION_SAVE_EVERY_REQUEST ayarını, sonrasında olduğunuz davranışı elde etmek için kullanabilirsiniz (oturumun açık maliyeti her istekte kaydedilmek zorundadır).

+0

Teşekkürler Chris, bu yaptı. Sağladığınız bilgiler dokümanlara dahil edilmelidir. – slypete

+1

Anlaşmalı. Bilet açmak ister misin? ;) – SmileyChris

3

Basit bir ara katman muhtemelen her görünümde bu ayarlamayı yapmaktan daha iyisini yapabilir. Bu benim kullandığım şey. SESSION_EXPIRY üzerinde

Bu bağlıdır
class SessionExpiry(object): 
    """ Set the session expiry according to settings """ 
    def process_request(self, request): 
     if getattr(settings, 'SESSION_EXPIRY', None): 
      request.session.set_expiry(settings.SESSION_EXPIRY) 
     return None 

config ayarlı. Biçim, request.session.set_expiry ile aynıdır.

MIDDLEWARE_CLASSES Bu düşünceyle sipariş ile tanımlanmış olmalıdır: django.contrib.sessions varsayılan olarak dikkate bu ayarı aldı

MIDDLEWARE_CLASSES = (
    ... 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    '<yourproject>.<yourapp>.middleware.SessionExpiry', 
    ... 
} 

iyi olurdu.

+0

SmileyChris 'yanıtını kaçırdınız mı? 'SESSION_SAVE_EVERY_REQUEST' herhangi bir özel katman yazılımı olmadan tam olarak bunu yapar. – slypete

+1

Evet, ancak yalnızca bir görünümde set_expiry olması, tüm kullanıcılarınızın son kullanma tarihini ayarlayan belirli görünümlere sahip olmasını gerektirir. Kullanıcılarınızın bu belirli bir görünümden geçmesi olası değildir. Zürafa ile bu sona erme setini bir görünüm dışında soyutlayabilirsiniz. Cevabı senin için çalışıyorsa, sakin ol. Bunun daha temiz bir yöntem olabileceğini düşündüm ve bunun için gitmeyi tercih ettim. –

+0

Bence cevabı yanlış anladınız. 'SESSION_SAVE_EVERY_REQUEST', belirli bir kodu görmeden yaptığınız şeyi yapar. Sadece tekerleği yeniden icat ettiğine işaret ediyorum. – slypete

İlgili konular