DEV Community

Mustafa  Çam
Mustafa Çam

Posted on

Sepet yönetimi

Evet, sepet bilgisini yönetmenin başka yolları da vardır; sepet verilerini saklamak için mutlaka session (oturum) yönetimine ihtiyaç duyulmaz. Session yönetimi, sepet bilgilerini saklamanın yaygın bir yolu olsa da, stateless yaklaşımlar ve alternatif yöntemler de kullanılabilir. İşte birkaç farklı çözüm:

1. Client-Side (İstemci Taraflı) Saklama

Sepet verilerini sunucuda tutmak yerine, istemci tarafında (kullanıcının tarayıcısında) saklayabiliriz. Bunun için birkaç yöntem kullanılabilir:

a) LocalStorage veya SessionStorage

Kullanıcının tarayıcısında depolama alanı olarak kullanılan LocalStorage veya SessionStorage, sepet verilerini saklamak için uygun olabilir.

  • LocalStorage:

    • Veriler tarayıcı kapatıldığında bile korunur.
    • Sepet verilerini JSON formatında LocalStorage’a kaydedebilirsiniz.
    • Sepet verileri yalnızca kullanıcıya özgüdür ve tarayıcı bazlıdır, yani kullanıcının tarayıcısını değiştirmesi veya cihazını değiştirmesi durumunda bu veriler kaybolur.
  • SessionStorage:

    • Veriler, tarayıcı sekmesi veya penceresi kapatılana kadar saklanır.
    • Sepet verilerini yalnızca oturum boyunca saklar, sekme kapandığında veri kaybolur.

Örnek:

  // Sepet verisini saklama (LocalStorage)
  let cartItems = [{ id: 1, name: 'Ürün A', quantity: 2 }];
  localStorage.setItem('cart', JSON.stringify(cartItems));

  // Sepet verisini okuma
  let storedCart = JSON.parse(localStorage.getItem('cart'));
Enter fullscreen mode Exit fullscreen mode

b) Cookies (Çerezler)

Sepet bilgileri tarayıcı çerezlerinde de saklanabilir. Çerezler, kullanıcının tarayıcısında küçük miktarda veri saklar ve tarayıcı tarafından her istekle birlikte sunucuya gönderilir.

  • Avantaj:
    • Sunucu tarafında her istekle birlikte bu veriler alınabilir (sunucu taraflı doğrulama veya kimlik doğrulama mekanizmalarıyla kullanılabilir).
    • Tarayıcı kapansa bile belirli bir süre boyunca saklanabilir.

Örnek:

  // Sepet bilgisi çerezlerde saklanır
  document.cookie = "cartItems=" + JSON.stringify(cartItems) + "; path=/; expires=Fri, 31 Dec 9999 23:59:59 GMT";
Enter fullscreen mode Exit fullscreen mode

2. Token Tabanlı Yönetim (JWT - JSON Web Token)

Stateless bir yapıda, sepet verilerini kullanıcıya ait bir token içinde saklayarak, sunucu tarafında durumu tutmadan sepeti yönetebilirsiniz.

  • JWT Kullanımı:
    • Sepet bilgileri JWT'nin payload kısmında saklanabilir.
    • Kullanıcı her istek yaptığında JWT'yi sunucuya iletir ve sunucu bu token’ı doğrulayarak sepet bilgilerini kullanabilir.
    • Bu yöntemle kullanıcıya özel bir sepet yönetimi sağlanabilir.

Not:

  • JWT'de sepet verilerini saklamak, token boyutunun büyümesine neden olabilir ve büyük veri taşıma konusunda sıkıntılar oluşturabilir. Genellikle kimlik bilgilerini saklamak için kullanılır.

3. Database Tabanlı Yönetim

Sepet verilerini kullanıcıya özgü bir şekilde veritabanında saklamak da oldukça yaygın bir yaklaşımdır. Böylece stateless bir yapıda sunucu, sepet bilgilerini her istekte yeniden yüklemez, ancak kullanıcının kimliğini doğruladıktan sonra veritabanından sepeti yükleyebilir.

  • Senaryo:
    • Kullanıcı oturum açtığında sepet verileri veritabanından çekilir.
    • Kullanıcı her alışveriş yaptığında sepet bilgileri güncellenir.
    • Sepet verileri kullanıcının hesabına bağlı olarak uzun süre saklanabilir.

Örnek:

  • Sepet bilgilerini bir shopping_cart tablosunda saklayabilirsiniz. Her kullanıcı oturum açtığında, sunucu bu tabloya bir sorgu göndererek sepeti getirir.
  CREATE TABLE shopping_cart (
      user_id INT,
      product_id INT,
      quantity INT
  );
Enter fullscreen mode Exit fullscreen mode

4. Backend Cache (Redis gibi)

Durumsuz bir yapı kullanmak istiyorsanız, sepet bilgilerini bir cache sistemi (örneğin Redis) ile de saklayabilirsiniz. Bu yaklaşım, hem sepeti hızlı bir şekilde erişilebilir kılar hem de sunucu tarafında fazla yük yaratmaz.

  • Senaryo:
    • Kullanıcı sepetine ürün eklediğinde, bu veri Redis gibi bir in-memory cache sistemine kaydedilir.
    • Kullanıcı her istek yaptığında, sunucu Redis'ten sepet verilerini hızlıca alır.
    • Kullanıcı oturum açtığında veya ürün eklediğinde, sepet bilgileri Redis üzerinden güncellenir.

Örnek:

  • Kullanıcı sepetini Redis'te "kullanıcı-id" anahtarına göre saklayabilir ve ürünleri oradan çekebilirsiniz.
  # Redis komutları ile saklama
  SET cart:user123 '{"products": [{"id": 1, "name": "Ürün A", "quantity": 2}]}'
  GET cart:user123
Enter fullscreen mode Exit fullscreen mode

Sonuç:

Sepet verilerini yönetmek için session yönetimi şart değildir. Aşağıdaki yaklaşımlarla sepet bilgilerini stateless veya client-side saklayabilirsiniz:

  1. LocalStorage/SessionStorage ile istemci taraflı saklama.
  2. Cookies ile sunucuya gönderilen çerezlerde saklama.
  3. JWT gibi token tabanlı stateless yöntemlerle.
  4. Veritabanı kullanarak sunucu tarafında uzun süreli saklama.
  5. Redis gibi bir cache mekanizması kullanarak hızlı erişim sağlama.

Uygulamanın gereksinimlerine ve mimari tercihlerinize göre bu yöntemlerden biri veya birkaçı kullanılabilir.

Top comments (0)