Durumsallık mutlaka kötü bir şey değildir, ancak durumlu ve durumsuz uygulamalar arasındaki farkı anlamanız gerekir. Kısacası, durum bilgisi olan uygulamalar o anki oturumla ilgili bilgileri korur ve durumsuz uygulamalar yok. Bir kullanıcı hesabının parçası olarak kalıcı olarak saklanan bilgiler bir oturumda saklanabilir veya saklanmayabilir, ancak bir kullanıcı hesabına ilişkin bilgilerin saklanması tek başına uygulamayı durumdan kurtarmaz. Durum bilgisi, sunucunun mevcut kullanıcının oturumu hakkındaki bilgileri istemci tarayıcısının koruduğunun ötesinde tutmasını gerektirir. Örneğin, bir müşteriye kimlik doğrulaması yapabilir ve daha sonra her istekle birlikte sunucuya gönderdiği bir JSESSIONID çerezi verilebilir. Sunucu, bu JSESSIONID değerini temel alarak uygulamanın oturum kapsamında bir şeyler depolamaya başlarsa, durum bilgisi olur.
Statelessness
Vatansız olarak, sunucu ve istemcinin kullanıcı oturumu hakkındaki güncel bilgileri korumadığı anlamına gelir. İstemci ve sunucu, istekler arasında kimlik doğrulama sağlamak için bir miktar belirteç kullanabilir, ancak başka bir güncel bilgi saklanmaz. Böyle bir çözüm için tipik bir kullanım örneği, çoğu kullanıcının (yeni tüketicilerin) bilgi tükettiği, ancak siteye geri dönen bilgiler üretmediği bir haber sitesi olabilir. Bu gibi durumlarda, sitenin mevcut kullanıcı oturumu hakkında herhangi bir bilgi tutması gerekmez. Sitenin, kullanıcıyı tanımlamak ve bu kullanıcının siteyi kullanmasıyla ilgili bilgileri depolamak için çerezleri kullanabileceğini, ancak kaydedilen her şeyin işlem yapabileceği, örneğin kullanıcının tıkladığı bağlantıyı kaydedebileceği için vatansız olarak kabul edilebileceğini unutmayın. Sunucu ancak kullanıcı oturumunda tutulmuyor.
Sunucudaki durum bilgisi
Sunucuda, durum bilgisi olan bir uygulama mevcut kullanıcılar hakkındaki durum bilgilerini kaydeder. Bu yaklaşım genellikle, kullanıcının isteklerini arasında sunucuda muhafaza edebilmesi için kullanıcının sistemini tanımlamak için çerezlerin kullanılmasını içerir. Uygulama bağlamına bağlı olarak oturumlar doğrulanabilir veya olmayabilir. Durum bilgisi olan sunucu uygulamaları, sunucudaki kullanıcı durumu bilgilerini önbelleğe alma, aramaları hızlandırma ve sayfa yanıtlama süresi avantajı sunar. Aşağı tarafta, bilgileri oturum kapsamında saklamak pahalıdır ve ölçekte çok kaynak yoğundur. Ayrıca, bilgisayar korsanlarının oturum tanımlayıcılarını denemek ve kaçırmak ve kullanıcı oturumlarını çalmak için potansiyel bir saldırı vektörü oluşturur. Durum bilgisi olan sunucu uygulamaları aynı zamanda kullanıcı oturumlarını beklenmeyen servis kesintilerine karşı, örneğin bir sunucu arızasına karşı koruma zorluğuna da sahiptir.
Müşteride durumluluk
JavaScript ve sessionStorage gibi modern tarayıcı teknolojilerini kullanarak, uygulama artık bir kullanıcının oturumu hakkındaki durum bilgilerini o kullanıcının cihazında kolayca depolayabilir. Genel olarak, başvuru hâlâ durumsal olarak değerlendirilebilir, ancak durumun sürdürülmesi işi müşteriye taşındı. Bu yaklaşımın (Web uygulamasının bakımı için) sunucudaki durumunun, her kullanıcının kendi durumunu koruduğu ve sunucu altyapısı üzerinde bir yükü bulunmadığı konusunda korunması konusunda büyük bir avantajı vardır. Web ölçeğinde, bu tür bir mimari seçim, donanım ve elektrik maliyetleri için büyük tepkilere sahiptir. Sunucuda durumunu korumak, kelimenin tam anlamıyla yılda milyonlarca dolara mal olabilir. Danışan üzerinde durumu koruyan bir sisteme geçmek, yılda milyonlarca dolar tasarruf sağlayabilir.
Jetonlar v. Çerezler
Çerezler, istemci cihazlar / tarayıcılar için tanımlayıcı olarak işlev görür. Her tür şeyi saklamak için kullanılabilirler, ancak genellikle CFML uygulamalarında CFID / CFTOKEN gibi bir tür tanımlayıcı depolarlar. Çerezler, kullanıcının tarayıcısında uzun süre yaşayacak şekilde ayarlanabilir ve bu sayede tarayıcı oturumları arasında bir uygulamada kimlik doğrulamayı sürdürme gibi şeyler yapılabilir. Çerezler ayrıca yalnızca hafızaya ayarlanabilir, böylece bir kullanıcı tarayıcıyı kapattığında kullanım süresi dolar.
Belirteçler genellikle sunucuda oluşturulan kullanıcı hakkında (bilgileri karıştırmak için şifreleme kullanarak), istemciye iletilen ve ardından gelen istekle sunucuya geri gönderilen bir tür tanımlayıcı bilgilerdir. Tek sayfa uygulamalarında ortak bir kalıp olan istek ve yanıtın başlığında geçirilebilirler. İdeal olarak, her istek / yanıt yeni bir belirteç üretilmesine neden olur, böylece belirteçler daha sonra bir saldırgan tarafından yakalanamaz ve kullanılamaz.
Tek Sayfa Uygulamaları ve müşteri durumu
SPA'larda durum bilgisi istemci tarayıcısına yüklenir ve orada saklanır. Durum değiştiğinde, örneğin sosyal medya hesabınıza bir güncelleme gönderdiğinizde, müşteri bu yeni işlemi sunucuya iletir. Bu durumda, sunucu bu güncellemeyi bir veritabanı gibi kalıcı bir veri deposuna kaydeder ve güncellemeyi temel alarak sunucuyla senkronize edilmesi gereken bilgileri müşteriye geri iletir (örneğin, güncellemenin kimliği).
İstemci üzerinde bu depolama durumunun, çevrimiçi / çevrimdışı deneyimler için, biraz da kullanılabilir bir uygulamaya sahipken, sunucu ile bağlantısının kesilebileceği için avantajlar sunduğunu unutmayın. Twitter, Twitter sunucusu uygulamasından bağlantısı kesilmiş olsa bile, Twitter beslemenizdeki yüklü herhangi bir müşteri tarafını gözden geçirebileceğiniz iyi bir örnektir. Bu kalıp ayrıca sunucu ile müşteri arasındaki senkronizasyonda karmaşıklık yaratır, ki bu tamamen kendine has bir konudur. Çözümün karmaşıklığı, müşteri üzerinde devleti idare edebilmenin bir yolu.
İstemcideki durum bilgisi, web uygulamalarının geleneksel masaüstü uygulamaları gibi daha fazla hissetmesini ve davranmasını sağlar. Masaüstü uygulamalarının aksine, genellikle hesap bilgilerinizin tümünü bir tarayıcıda müşteri oturumunuza yükleyemezsiniz. Bunu yapmak birçok durumda pratik olmaz ve kötü deneyimler doğurur. Tarayıcıya Gmail kutusunun tamamını yüklemeyi denemeyi hayal edebiliyor musunuz? Bunun yerine, istemci hangi etikete / klasöre baktığınıza ve o klasördeki e-posta listesindeki nerelere baktığınıza ilişkin bilgileri tutar. Hangi durum bilgisinin korunacağını ve neye ihtiyaç duyulacağının dengelenmesi, bu örüntüdeki başka bir mühendislik zorluğudur ve yine pratiklik ile iyi kullanıcı deneyimleri sağlama arasındaki bir farkı temsil eder.
Alışveriş sepetlerini ve benzerlerini
Alışveriş sepeti gibi teknik özelliklere gelince, gerçekten çözüme bağlı. Bir alışveriş sepeti, sunucudaki bir veritabanında saklanabilir, yalnızca sunucudaki oturum kapsamında saklanabilir veya hatta istemcide saklanabilir. Amazon, giriş yapan kullanıcılar için kalıcı alışveriş sepetlerine ve anonim kullanıcılar için "geçici" alışveriş sepetlerine sahip olsa da, bu alışveriş sepetlerinde bir dereceye kadar kalıcı olsa da.
Aynı marka altında yaşayan bir grup farklı uygulama olan Google gibi bir şeyden bahsettiğinizde, muhtemelen ortak bir mimariyi paylaşmazlar ve her biri kullanıcılarının ihtiyaçlarını en iyi şekilde karşılayacak şekilde inşa edilir. Bir sitenin nasıl oluşturulduğunu öğrenmek istiyorsanız, geliştirici araçlarını tarayıcınızda açın ve siteye bakın. Çerezleri kontrol edin, ağ trafiğini izleyin ve nasıl çalıştığını görün.
Üzgünüm, bu cevap biraz karışık olursa, ancak durumluluk karmaşık bir konudur.