Çok sayıda veri depolamak için PHP oturumları?

7 Cevap php

Ben bir medya imleme sitesi geliştiriyorum ve bir kullanıcı (kontrol etmek için her sayfa yükleme DB gitmek zorunda kalmadan) bir öğe yer imi olmadığını hatırlamak için bir yol arıyorum.

Ben daha önce PHP oturumları kullanmadıysanız, ama onlar hile yapacağını düşünüyorum.

Kullanıcı oturum açtığında bir başlangıç ​​DB arama yapmak için mantıklı olur, bir kullanıcı imi olan tüm öğeleri kapmak ve kullanıcı oturumuna tüm öğe kimlikleri bir dizi tasarruf?

Bir sayfa yüklendiğinde, sonra sayfada 100 öğelerin her biri için o öğenin kimliği oturumu dizide olup olmadığını kontrol ediyorum (bu yüzden "imi" butonuna ya da zaten sık ettik ki bir göstergesini görüntülemek için olmadığını bilmek .)

Sadece bu doğru bir strateji emin olmak istiyorum, ya da daha iyi bir yolu olup olmadığını. Dizideki 10.000 kimlikleri bu iş para cezası vardır istiyorsunuz bile?

7 Cevap

Oturum yönetimi sağlamlık ve hızını artırmak için bir ortak PHP strateji veritabanında oturum verilerini saklamak için olduğunu unutmayın. Sen ters yöne gibi görünüyor.

Yanı sıra Memcached uzantısı bir göz alabilir - veri depolama olarak sunucunun bellek kullanır.

Oturumda verileri saklama da veri bazı 15 dakika sonra kaybolur (varsayılan, ama değişebilir) anlamına gelir.

Bir DB verileri kaydetmek gerekir imho, sonra (dedi Mark Tyler @ gibi, yani memcache) sonraki okur için bazı önbelleğe kullanın.

Veritabanına gidiyor kez pageload başına ne kadar kötü abartma yoktur. Sen neden bahsettiğini yapmak PHP uygulamalarının çok (ve çok) bulabilirsiniz. Bir sürü uygulama ~ 30 sorguları nedenle tek bir sayfa yük çalışıyor olabilir, vb kullanıcı verileri, forum veri, haber, vb almak, veritabanından sayfanın çeşitli yerlerinde çekin.

Çerez benzersiz bir kimlik Mağaza ve veritabanında akıllı bir şekilde saklamak istediğiniz oturum bilgilerini depolamak.

Sen çok ileriye düşünce olabilir. Burada iyi bir yaklaşım sistem kaynaklarını (db yük, web sunucusu yük), ve sonra do bir sorun fark ederseniz, monitör, mantıklı bir şekilde (yani sunucu tarafı) ihtiyacınız işlevselliği kurmak olacaktır bunu çözmek için refactor.

Eğer saçma bir şey yapmak istiyorsanız Peki, sayfa değişiklikleri hayatta bazı nesne, JavaScript kullanarak istemci tarayıcısına tüm veri depolayabilir. Size baş ağrısı bir çok ekler beri ben, bunu tavsiye etmem, ama ben orada tüm garip AJAX-y çözümleri ile düşündüm, faiz :-) olabilecek

Ben php için ADODB kullanarak öneriyoruz. Bunu http://phplens.com/lens/adodb/docs-adodb.htm#caching ile önbelleğe alma özellikleri hakkında daha fazla bilgi edinebilirsiniz sorgu önbelleğe alma ve SQL injection koruması vb inşa etti

Burada en iyi çözüm, veritabanındaki bir favori / imi tablo var o user_id ve item_id içeren ve eklemek bir öğe alma mantığına katılmak.

Sonra ek SQL komutları çalıştırmak ne oturumda şey saklamak gerekmez, sadece bu favori sütunların varlığı için kontrol etmeniz gerekir.