TÜM oturumları bazı oturum verileri temizlemek için bir yolu var mı?

6 Cevap php

Genel olarak, ben şu senaryo var:

  • Ürün ve veritabanı onun ilgili verileri almak
  • Php için getirilen verileri dönüştürmek 'ürün' nesne
  • oturumda önbellek ürün nesne

Önbellek, readonly sitede ürünleri inceleyen yani müşteriler.

Ama getProductIdsByCategory($categoryId) gibi aramaları ve bu sonuçlar hakkında okudum küresel önbelleği kullanarak değil, kullanıcı başına, çok önbelleğe gelen productIds vardır.

Bir sorun yönetici tarafta birisi yeni bir ürün ekler ve bir kategoriye ilişkin ise yeni bir oturum başlayıncaya kadar, sonra müşterilerin getProductIdsByCategory yeni productId'den kendi önbelleğe gelip yok olmasıdır.

Temizlemek için bir yolu var mı, örneğin $_SESSION['x'] sunucuda TÜM oturumları yeni bir ürün eklendiğinde? Müşteriler daha sonra vb kendi giriş kaybedersiniz çünkü tüm oturumları yok etmek istemiyorum

Yoksa genel önbellek bu önbelleğe productId'den aramalar hareket etmelidir?

ps, bir özel inşa önbellek kullanarak memcached değil veya benzer duyuyorum.

Teşekkürler

6 Cevap

Varsayılan olarak, oturum verileri yere dosya sistemi sadece tefrika dosyaları, ve (herhangi bir anda açık oturumlarda adım kalmamak kilitlemeyi saygı) söz konusu bilgileri kaldırmak için hepsini değiştirmek gitmek mümkündür.

Ben gerçekten olsa, bunu önermiyoruz. Ne tavsiye ederim bu önbelleğe alınan veriler session_start() olur baktı alır bir veri tabanında depolanan zaman damgası gibi, yenilenir, ve gerektiği sinyal bir yöntem yapıyor önbelleğe alınan veriler damgası daha eski ise, önbelleği temizlendi.

Eğer memcache gibi bir önbellek sistemi ile real shared state ile yapabileceği gibi olmak için geliyor.

Akla yazdıran diğer tek yolu kirli önbellek veri bayrakları için başvuru onay var ve bunu kendisi silmek, ya da önbellek bir çözümlenebilir tefrika halinde bir veritabanında ise onları okumak için expensive senaryo yazmaya tüm, ama zaten veriyi okudum istekleri ile kötü lag yaratacaktır.

Ben nesne kopya kontrol etmekten paylaşılan gerçek devlet ile giderdim.

Eğer herhangi bir veri belirli bir bit takas, bir veritabanında oturumları saklamak sürece zor olacaktır.

Ben dosyaları yerine kullanıcı oturumlarında önbelleğe alma öneririz. Bu şekilde, aynı faydaları elde, ama bunu temizlenmiş aldığında önbelleğe ve ne üzerinde tam kontrol olsun.

Belirli bir uygulama için tüm varolan oturumları devre dışı bırakmak için, sadece PHP'nin kullanarak oturumun adını değiştirmek için uygulamayı değiştirmek session_name('new_session_name'). Bu fonksiyon) (her bir çağrı session_start önce çağrılması gerekir.

Bu aslında clear geçerli oturumlar olacak, ancak bu uygulama için yararlı artık onları vermektedir.

Evet, küresel bir önbellek taşımak gerekir. Oturumlar küresel erişilebilir olması anlamına gelmez, ben pek mümkün olduğunu düşünüyorum.

Bir oturum değer kullanımı temizleyin:

unset($_SESSION['x']);

Bunun için oturumlarda size olabilir loop