Django’da hareketsizlik nedeniyle oturum nasıl sona erer?

| | | | | | | | | | | | | | | | | |

Django uygulamamız aşağıdaki oturum yönetimi gereksinimlerine sahiptir.

  1. Kullanıcı tarayıcıyı kapattığında oturumlar sona erer.
  2. Oturumlar, belirli bir süre işlem yapılmadığında sona erer.
  3. Etkinlik olmaması nedeniyle bir oturumun süresinin dolduğunu tespit edin ve kullanıcıya uygun mesajı görüntüleyin.
  4. Kullanıcıları, etkinlik dışı kalma süresinin bitiminden birkaç dakika önce yaklaşan bir oturumun sona ermesi konusunda uyarın. Uyarıyla birlikte, kullanıcılara oturumlarını uzatma seçeneği sunun.
  5. Kullanıcı, uygulama içinde sunucuya gönderilen istekleri içermeyen uzun bir iş etkinliği üzerinde çalışıyorsa, oturum zaman aşımına uğramamalıdır. .

Belgeleri, Django kodunu ve bununla ilgili bazı blog yazılarını okuduktan sonra aşağıdaki uygulama yaklaşımını buldum.

Gereksinim 1< /strong>
Bu gereksinim, SESSION_EXPIRE_AT_BROWSER_CLOSE öğesini True olarak ayarlayarak kolayca uygulanabilir.

Gereksinim 2
Oturumun sona erme tarihini ayarlamak için SESSION_COOKIE_AGE kullanmak için birkaç öneri gördüm. Ancak bu yöntemin aşağıdaki sorunları vardır.

  • Kullanıcı uygulamayı aktif olarak kullanıyor olsa bile oturum her zaman SESSION_COOKIE_AGE sonunda sona erer. oturum, özel bir ara katman yazılımı kullanarak veya ayarlayarak her istekte oturumu kaydederek her istekte SESSION_COOKIE_AGE tarihine kadar sona erer SESSION_SAVE_EVERY_REQUEST - true. Ancak, SESSION_COOKIE_AGE kullanımı nedeniyle bir sonraki sorun kaçınılmazdır.)

  • Çerezlerin çalışma şekli nedeniyle, SESSION_EXPIRE_AT_BROWSER_CLOSE ve SESSION_COOKIE_AGE birbirini dışlar, yani çerezin süresi tarayıcı kapatıldığında sona erer veya belirtilen son kullanma süresinde. SESSION_COOKIE_AGE kullanılırsa ve kullanıcı çerezin süresi dolmadan tarayıcıyı kapatırsa, çerez korunur ve tarayıcının yeniden açılması, kullanıcının (veya başka birinin) yeniden kimlik doğrulaması yapılmadan sisteme girmesine izin verir.

  • Django, oturumun etkin olup olmadığını belirlemek için yalnızca mevcut tanımlama bilgisine güvenir. Oturumla birlikte saklanan oturum bitiş tarihini kontrol etmez.

Bu gereksinimi uygulamak ve yukarıda belirtilen sorunları çözmek için aşağıdaki yöntem kullanılabilir.

  • SESSION_COOKIE_AGE ayarlamayın.
  • Oturumun sona erme tarihini her istekte "geçerli zaman + hareketsizlik dönemi" olarak ayarlayın.
  • SessionMiddleware'de process_request'i geçersiz kıl ve oturumun sona erdiğini kontrol edin. Süresi dolmuşsa oturumu atın.

Gereklilik 3
Oturumun süresinin dolduğunu tespit ettiğimizde (özel SessionMiddleware'de yukarıda), oturumun sona erdiğini belirtmek için istekte bir öznitelik ayarlayın. Bu öznitelik, kullanıcıya uygun bir mesaj görüntülemek için kullanılabilir.

Gereksinim 4
Şunu yapmak için JavaScript kullanın. kullanıcı hareketsizliğini tespit edin, uyarıyı ve ayrıca oturumu uzatma seçeneği sağlayın. Kullanıcı uzatmak isterse, oturumu uzatmak için sunucuya bir canlı tutma sinyali gönderin.

Gereksinimler t 5
Kullanıcı etkinliğini (uzun iş operasyonu sırasında) algılamak için JavaScript kullanın ve oturumun süresinin dolmasını önlemek için sunucuya canlı tutma darbeleri gönderin.


Yukarıdaki uygulama yaklaşımı çok ayrıntılı görünüyor ve daha basit bir yöntem olup olmadığını merak ediyordum (özellikle Gereksinim 2 için).

Herhangi bir içgörü çok takdir edilecektir.