HTTP Oturumu veya Veritabanı yaklaşımı


16

Benim yaklaşımı olması gerektiği gibi biraz kafam karıştı, alışveriş sepeti tasarımı üzerinde çalışıyor ve alışveriş sepetini oturumda veya veritabanında saklamalıyım ama hangi yaklaşımın en iyi olacağından emin değilim. Kullanım örneği

  1. Kullanıcı oturum açmadı ve sepete ürün ekledi (Anonim kullanıcı)
  2. Kullanıcı oturum açtı ve sepete ürün ekledi.

İlk durum benim için daha kafa karıştırıcı, çünkü kullanıcının sadece web mağazasını ziyaret ettiği ve giriş yapmadan ürün eklediği ve bir ödeme sürecine girmeyebileceği pek çok durum olabilir.

Ama yine de bu kullanıcı için bir Alışveriş Sepeti yaratmamız gerekiyor, alışveriş sepeti oluşturmak ve kaydetmek için iki seçeneğim var.

  1. Kullanıcı bir ürün eklerken, veritabanında bir sepet oluşturun ve bu sepeti bu kullanıcıyla ilişkilendirin, giriş yaptığı anda bu sepeti giriş yapmış kullanıcıya taşıyın.
  2. Sepet oluşturun, ürün ekleyin ve oturuma kaydedin, kullanıcı oturum açtığında veritabanında Sepet oluşturun ve oturum açmış kullanıcı ile bu alışveriş sepetini Kullanıcı ile ilişkilendirin.

Ben hem veritabanı tahrikli Sepet sistemi hem de Oturum tabanlı orada olumlu yanı sıra olumsuz yönleri olabilir biliyorum, ama aşağıdaki noktaları dikkate alarak hangi en iyi yaklaşım olabilir emin değilim

  1. Ölçeklenebilirlik
  2. Esneklik
  3. uzayabilirlik
  4. Uygulama Hız ile ilgilenmelidir

Yola karar vermek için bu açıdan girdi aranıyor.


2
Neden? Birkaç yüz e-ticaret sitesi işletiyorum ve her şeyi çerezlerde veya localStorage'da (HTML5) saklıyoruz. Ayrıca, oturumlarda bellek kullanılır. Hesap girişi yaptığımızda zaman damgası olan şifreli bir çerez kullanıyoruz. Bir oturum yüklediğimizde, bir sayfa yüklendiğinde, tek bir yüklemeden sonra sessionStorage'ı depolamak ve kullanmak için HTML5 tekniklerini kullandığımızdan. Bu IE8 + uyumlu standart web teknolojisidir.
Jason Sebring

@LuiggiMendoza tamam neden olmasın.
Jason Sebring

@ zipstory.com: Ayrıca HTML5 tabanlı çözüm hakkında bir göz atmak istiyorum, ama yine de birkaç tarayıcı tarafından desteklenmediğinden, biraz şüpheliyim
Umesh Awasthi 5:13

@UmeshAwasthi Müşterilerimin alt tarayıcılarda çok az avuç insan umurunda olmadığını varsayalım, ancak açıkçası bu kötü bir yaklaşım, web trafiğinizde farklı bir durum. Hala dünyanın birçok yerinde IE7 ve bazen IE6'da XP kullandığını biliyorum, ancak bazı müşterilerimin ürünleri Nordstroms ve Macy's gibi mağazalarda bulunuyor ve bu konuda endişeli görünmüyor.
Jason Sebring

@ zipstory.com: İstemcinin IE6 için bile destek istediği bir e-ticaret uygulamasıyla çalışıyorum, şimdi abt diyeceksiniz :)
Umesh Awasthi

Yanıtlar:


9

Siteye ilk ulaştıklarında tüm ziyaretçilere benzersiz bir kimlik atanmış bir çözüm ararım. Anonim veya kimliği doğrulanmış olmaları önemli değil. Anonim kullanıcılar kaydolduğunda, benzersiz kimliği koruyun.

Alışveriş sepetini veritabanında saklayın. Depolama alanı ucuzdur ve her seferinde araba için bir sorgu yapmak performans açısından sorun olmamalıdır.


alışveriş sepeti ayrıntı sayfasını göstermem gerektiğinde ne olacak? oturumdaki verileri depolamalı / almalı mıyız yoksa bir veritabanı isabeti mi yapmalıyız?
Umesh Awasthi

Sepet ayrıntılarını veritabanında saklarsanız, evet, veritabanına vurmanız gerekir.
Jakob Gade

7

Her iki yöntemin de avantajları ve dezavantajları vardır, ancak benim gördüğüm şekilde, veritabanı depolamanın iki büyük avantajı vardır.

  1. Raporlama. Veriler oturumda ise terk edilmiş alışveriş sepetleri, dönüşüm oranları vb. Hakkında rapor oluşturamazsınız.
  2. Oturum zaman aşımları. Ben akşam yemeği yemeye gitti ve oturum sona erdi çünkü benim sepeti boşaltılmış bulmak için geri geldi rahatsız olurdu. Perakendecinin de bundan hoşlanmayacağını düşünürdüm. Kullanıcıyı pes etmek ve terketmek yerine satın almaya yöneltmek istiyoruz.

6

Soru, müşterilerim pazarında ihtiyaç duyulmayan oturumlara ihtiyacınız olduğunu varsayar. Birkaç yüz e-ticaret sitesi işletiyorum ve bir avuç yüksek trafik alıyor. Çiftlikleri dışarıda bırakılmadığı sürece ölçeklenebilir olmadıkları için oturumları kullanmayız, o zaman daha yavaştırlar veya daha fazla kurulum gerektirirler. Oturumlar bellek tüketir ve oturum durumunun veritabanı getirilmesi çok yavaştır ve daha fazla hareketli parça gerektirir.

Bunun yerine, HTML5 sessionStorage'ı, bant genişliğini artırmak için her seferinde bir çerez rountripine ihtiyaç duymadan tekrar tekrar çekmemiz gereken kullanıcı bilgilerini saklamak için kullanıyoruz. Bu IE8 + ve diğer tüm modern tarayıcılar ve mobil cihazlar bu teknoloji ile uyumludur. AMA daha önce yaptığımız gibi, sepeti kolayca bir çerez olarak yedek olarak saklayabilirsiniz. İşte iyi bir çerez sepeti: http://simplecartjs.org/

Kullanıcılar oturum açtıklarında veya oturum açtıklarında, zaman damgasına sahip şifreli bir çerez kullanırız.

Ayrıca, kaynakların ve hatta verilerinizin kataloglanabilmesi için web trafiğini bir yan not olarak daha da azaltacak olan ApplicationCache'i kullanmaya doğru ilerliyoruz. Tabii ki ürünler değiştiğinde manifestleri güncellemeye dikkat etmelisiniz.


4

Oturum depolama alanı ve veritabanı depolama alanının özel olduğunu varsayıyorsunuz. Onlar değil. Ama başladıklarını varsayarak başlayalım.

Oturum depolamanın avantajı üç yönlüdür:

  1. Veritabanına açıkça veri eklemenize gerek yoktur. Sadece bir oturum değişkeni belirlediniz ve işiniz bitti. İşlevsel olarak basit ve düşük riskli.
  2. Bir kullanıcı ziyaretinin ve alışveriş sepetinin yaşam döngüsünü kapsayıcılar / çerçeveler sizin için yaptıkça yönetmeye gerek yok
  3. Genellikle eski boş oturumların otomatik temizliği sizin için yapılır.

Oturum depolamanın dezavantajları:

  1. Çoğaltmayı araştırmadığınız sürece oturum benzeşimi
  2. Oturum durumunun diske çoğaltılmasını veya el ile kalıcılığını araştırmazsanız, yük devretme olmaz, bu da karmaşıklaşabilir.
  3. Tüm oturumlar bellekte saklanmalıdır. Çoğaltma kullanıyorsanız, bu yükseltilir.

Veritabanı depolamanın avantajları:

  1. Oturum benzeşimi veya durum çoğaltması hakkında endişelenmenize gerek yok. Tüm istekleri yuvarlayabilirsiniz.
  2. Uygulamada daha az bellek ek yükü.
  3. Sipariş tamamlanırsa, her şey yine de veritabanında sona erer, bu nedenle veriler zaten mevcut olduğundan bu tamamlamayı kolaylaştırabilir.

Veritabanı depolamanın dezavantajları:

  1. Terk edilmiş arabaları - bazı anonim kullanıcılar alışveriş sepetlerine bir ürün ekledi ve kayboldu. Bir tür sona erme süreciniz olmadığı sürece bu veriler sonsuza kadar dolanır.
  2. Kullanıcıları izlemenin ve belirli bir istek için bunun mevcut veya yeni bir göz atma oturumunu temsil edip etmediğini bulmanın bir yolunu bulmanız gerekir. (evet, bir çerez kullanıyorsanız bu muhtemelen kolaydır, ancak iki kullanıcının aynı kimliğe sahip olmamasını nasıl sağlarsınız?).
  3. Daha fazla kod

Hangi platformu kullandığınızdan bahsetmediniz. Ben bir istek / yanıt döngüsü ömrü boyunca, sadece veritabanından yükleme ve veritabanına geri kaydetme oturumu veri sadece bellekte bulunan bir veritabanı destekli oturum kullanan bir yaklaşım ararım. Bu bana geçmişte iyi hizmet etti.

Veritabanı destekli bir oturumun avantajları:

  1. Sunucu benzeşmesine gerek yok.
  2. Uygulama sunucusu belleğinde kolay
  3. Boşta / terk edilmiş oturum verileri sizin için temizlenir.
  4. Kullanıcı ilk ziyaretinin yaşam döngüsü, tekrar ziyaret, oturum sonu sizin için anlaşılır.
  5. Kolay kodlama

Veritabanı destekli bir oturumun dezavantajları:

  1. Konfigürasyon - kapsayıcınızın PHP, Java EE (Tomcat, Jetty, JBoss, vb.), Node.js + express.js olup olmadığını araştırmanız veya bunu desteklememesi ve doğru yapılandırmayı sağlamanız gerekir.
  2. İstek başına 2 veritabanı işlemi eklediğiniz için bunu yüklemeniz gerekebilir.

Birisinin daha önce değindiği üçüncü bir olasılık var. Oturumların kullanımını tamamen atlayabilir ve her şeyi bir çereze veya html yerel depolama alanına gömerek istemci tarafı depolamayı kullanabilirsiniz.

Bunun artılarını / eksilerini size bir egzersiz olarak bırakacağım, ancak html5 depolama için tarayıcı uyumluluğunun dikkatlice gözden geçirilecek bir şey olabileceğine dair bir ipucu vereceğim.

Sizin için gerçekleri özetledim. Umarım bu durumunuz için doğru kararı vermenize yardımcı olur.


Alışveriş sepetlerine yerleştirilen şeylerin satın alma oranlarını analiz etmek için, organizasyonun veritabanı depolama avantajını kaçırdınız.
HLGEM

@HLGEM Mükemmel fikir - Bunu hiç düşünmemiştim!
Brandon

Bunu düşünüyorum çünkü veritabanındaki verilerin analizini yapan benim. Veritabanları tasarlarken, ilk sorulardan biri, bu verilere ne ihtiyaç duyacağımız olmalı ve hiç kimse bunu sormuyor.
HLGEM

3

Bahsettiğiniz iki kullanım örneğini ele alalım

Kullanıcı oturum açmadı ve sepete ürün ekledi (Anonim kullanıcı)

Bu durumda, oturumu sırasında kullanıcıya iyi hizmet verebilmek için kullanıcının oturum bilgilerini kesinlikle bir oturumda kaydetmek istersiniz. Oturum açmaya / hesap oluşturmaya karar verirse, bunu bir sonraki kullanım durumuna göre halledebilirsiniz. Oturum açmazsa, yalnızca oturum sırasında misafire hizmet vermek için kullanıldığından veritabanınızı bu konuk kullanıcı bilgileriyle doldurmanız gerekmez. Bu veriler Vatansız bazında ele alınabilir, yani durum oturumdan oturuma kaydedilmez.

Kullanıcı oturum açtı ve sepete ürün ekledi.

Bu durumda, yukarıdakiyle aynı şekilde (eski okul e-ticaret siteleri) işleyebilir ve ayrıca bu bilgileri veritabanına ekleyebilir ve kullanıcıyla ilişkilendirebilirsiniz. Bu, esas olarak Amazon.com'a benzeyen "Ürün Tarama Geçmişi", "Öneriler" vb. Gibi durum bilgisi içeren (oturumdan oturuma kaydedilen durum) bilgi sağlamak için kullanılır.

Düşünülecek şeyler:

  • Verileri kaydetmek gerekli mi?
  • Evetse, kullanıcıya daha iyi hizmet verebilmek için hangi verilerin kaydedilmesi en kritik öneme sahiptir?
  • Ölçeklenebilirlik + veri depolama - Birçok kullanıcıyı desteklemek için veritabanınızda hızlı arama için sepet bilgilerini nasıl kaydedersiniz?

3
Ayrıca şirketin satışları analiz etmesine de yardımcı olur. Bir ürünün sepete ne sıklıkta konulduğu ancak satın alınmadığı Yüzde yüksekse, ürünün nasıl sunulduğuna veya değişikliklerin satın alma oranını artırmaya yardımcı olup olmadığını görmek için fiyatına bakmak isteyebilirler. Kaydetme ayrıca, kullanıcının tekrar aramak yerine baktığı gün sipariş etmediği takdirde kullanıcının bu öğeleri hızlı bir şekilde görmesine izin verebilir. Yani belki onları sepetinize koydunuz ama gerçekten satın almak için yarın (ödeme günü) beklemek istediniz. Bu nedenle, verilerin kaydedilmesi gerçek müşterilerinizin daha fazla ürün satın almasına neden olabilir.
HLGEM

Ama sonunda bu bir gereksinim tanımlama problemidir ve işinize ne yapmayı planladığınızı söylemeli ve herhangi bir şey inşa etmeden önce beklediklerinden emin olmalısınız.
HLGEM

İşletmenin gelecek için verilere neye ihtiyaç duyabileceği açısından sipariş ve alışveriş sepetlerini düşünmeniz gerektiğini unutmayın. Verileri analiz etmek istiyorlarsa, saklamak en iyisidir. Geliştiriciler kullanıcı arabirimine asılır ve tasarlanırken verilerin saklanma amacını unuturlar.
HLGEM

@HLGEM: Çok iyi bir nokta! Bu soruyu yalnızca konuk bir kullanıcı için bir site üyesine karşı araç işlevini destekleme ihtiyacına dayanarak yanıtladım. Bir iş açısından bakıldığında, coğrafya, kullanıcı sayısı, ilgili ürünler, satın alma ve
atma

0

Kullanıcı oturum açmamışken oturuma gidin. Oturum açtığında bile önce oturumu sepeti oluşturun ve yalnızca kullanıcı oturumu kapattığında veya oturum zaman aşımına uğradığında veritabanında saklayın.

Oturumda oluşturulan arabaların sayısını kontrol etmeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.