Bunun yinelenen olarak işaretlenme şansının büyük olduğunu biliyorum, ancak tam olarak aradığım şeyi bulamadım
Bu yaygın bir sorundur ve eminim bazı iyi tanımlanmış en iyi uygulama çözümlerine sahiptir
Arka fon
Tek bir sayfa SaaS uygulaması, çok fazla sürükle ve bırak özelliği var, kullanıcı belirli bir süre boyunca çok fazla sunucu iletişimi olmadan onunla etkileşime girebilir
Sunucu oturumu, kalıcı olmayan bir oturum çerezi kullanarak yalnızca kullanıcı nesnesini tutar
Oturum, sunucuda X saat sonra dolar
Bazı şeyler yalnızca giriş sırasında yüklenir
Sorun
- Kullanıcı uygulamada çalışır, bittiğinde kullanıcı oturumu kapatmaz, sadece tarayıcıyı açık tutar
- Kullanıcı X saatten uzun bir süre sonra geri döner (oturum sunucuda geçersiz kılınır)
- Kullanıcı bir sunucu bağlantısına ihtiyaç duymadan uygulama ile etkileşime girer (şeyleri sürükler ve bırakır, metin düzenlemeleri ...)
- Yalnızca bir sonraki sunucu etkileşiminde (otomatik kaydetme olmadığını varsayalım) kullanıcı giriş sayfasına atılır ve işlerinin bir kısmını kaybeder
Olası çözümler
İşte aklımdaki bazı çözümler, başkaları olup olmadığını ve herhangi biriyle ilgili temelde yanlış bir şey olup olmadığını duymak istiyorum.
1. Kullanıcıyı asla çıkış yapmayın
- Nasıl? ya uzun bir oturum tutun, kalıcı bir çerez tutun ya da javaScript "canlı tutun" ping
- Artıları : kullanıcının hiçbir şey için endişelenmesine gerek yok, onlar için sorunu çözüyor
- Eksileri : PCI uyumlu değil, güvenli değildir ve geliştirme değişikliklerine ihtiyaç duyar, örn. Yalnızca kullanıcı oturum açtığında oturuma yüklenen şeyler bir pub alt modeline (olay değişikliklerini dinleyerek) geçmeli veya önbellek zaman aşımına sahip olmalıdır.
2. Yerel Depolama
- Nasıl? Oturum kapalıysa durumu geçici olarak depolamak, giriş sayfasına yönlendirmek, oturum açıldıktan sonra da devam etmek için yeni yerel depolama alanı kullanın
- Artıları : Ayrıca, yalnızca oturum zaman aşımı ile uğraşmakla kalmayıp "çevrimdışı çalış" desteği için de temel oluşturur
- Eksileri : uygulanması daha zor, veri ağacının durum birleştirmesini yapmanız gerekiyor, tüm tarayıcılar desteklemiyor
3. Otomatik kaydet
Modeli değiştiren her kullanıcı eylemi hemen devam etmelidir (veya bir tür istemci tarafı kuyruğu yoluyla), örneğin bir onay kutusunu işaretlerse, bir metin alanını değiştirirse veya bir şey yapıldıktan sonra değişiklikleri devam ettirirse sürükleyip bırakmalıdır.
- Nasıl? Modeli bağlamak için bir MV ** çerçevesi (Backbone.js / Knockout.js / Ember.js / Angular.js vb.) Kullanın ve değişikliklere devam edin.
- Artıları : Temiz bir çözüm gibi görünüyor, kullanıcı aktif olduğu sürece oturum aktiftir, devam etmeden istemci tarafı işi yapılmaz.
- Eksileri : Bir oturum zaman aşımı kaybolduktan sonra kullanıcının yaptığı son eylem.
4. Oturum süresi dolduktan sonra kullanıcının oturumunu kapatın
bunun birkaç yaklaşımı olabilir
Sunucuya "oturumun süresi doldu" deyin - sunucuya sadece soru oturumu genişlettiği için (zaman aşımını yeniden başlatır), bu bir yakalama 22 / Schrodinger'in kedisidir.
- Nasıl? Ya böyle bir soruyu destekleyen bir sunucum var (hiçbirini bilmiyorum, ama Java toprağından geliyorum) ya da biri sadece oturum kimlikleri tablosunu tutabilir ve son erişim süresini manuel olarak alabilir ve oturumu geçerek sunucuya sorabilir Tanımlama bilgisi yerine bir parametre olarak ID, bunun mümkün olup olmadığından emin değilim, ancak tehlikeli, güvensiz ve kötü bir tasarım whatsoever.login sayfasında görünüyor, giriş yaptıktan sonra devam ediyor
- Artıları : Sunucularda böyle bir yerel destek varsa, temiz ve meşru bir soru gibi geliyor (X kullanıcısının hala bir oturumu olup olmadığını soruyorlarsa yenilerken sormuyorlar)
- Eksileri : Sunucu desteklemiyorsa (ve yine, herhangi bir sunucu veya çerçevenin bu işlevselliğe sahip olup olmadığını bilmiyorum), geçici çözüm potansiyel olarak büyük güvenlik risklerine sahiptir.
Duyduğum bir çözüm, sunucu tarafında kısa bir oturum ve maksimum sayıda ping olan canlı bir istemci tarafı pingi yapmaktır.
- Nasıl? Sunucuda kısa oturum, istemci her oturumda ping yaparTimeOut / 2, maksimum Y yeniden deneme özelliğine sahiptir.
- Artıları : Bir çeşit sorunu giderir, hızlı ve kirli
- Eksileri : Bir saldırı gibi hissediyor, sunucunun bunu yapmasına izin vermek yerine oturum yenilemeyi kendiniz hallediyor
İstemci tarafı zamanlayıcısı
Nasıl? İstemci tarafında bir zamanlayıcı bulundurun ve kullanıcı sunucuya herhangi bir istek göndermedikten sonra, maksimum sunucu oturumu zaman aşımı eksi bazı dolgulara eşit olması için her istekte yeniden başlatarak sunucu ile senkronize edin. mola vermek üzere, devam etmek istiyor musunuz? " (çevrimiçi bankacılıkta olduğu gibi)
Artıları : Sorunu düzeltir
- Eksileri : Senkronizasyonun çalıştığından emin olmanın dışında herhangi bir şey düşünemiyorum
Soru
Muhtemelen yukarıdaki analizde bir şey eksik, aptalca hatalar olabilir ve bunları düzeltmek için yardımınızı istiyorum. Bunun için başka hangi çözümlere sahip olabilirim?
now
. 4.2 sunucunuzu öldürmek ve maliyetleri artırmak için harika bir yol gibi geliyor 4.3 Android'de, ana ekrana geri döndüğünüzde işlemin duraklatıldığından ve bu durumun istemcinizin zamanlayıcısını etkileyebileceğinden eminim.