Kimlik ve kullanıcı bilgilerini saklamak için Yaklaşım

2 Cevap php

Ben Zend Framework kullanıyorum ama benim soru oturumları / veritabanları / auth (PHP MySQL) hakkında geniş olduğunu.

Şu anda bu kimlik benim yaklaşımdır:

1) User signs in, the details are checked in database. - Standard stuff really.

Ayrıntılar doğru ise 2), sadece kullanıcının benzersiz kimliği oturumda depolanır ve bir güvenlik belirteci (kullanıcı benzersiz ID + IP + Tarayıcıya bilgileri + tuz). Olarak oturum dosya sistemi yazılır.

  • Etrafa okuma oldum ve birçok oturumlarda şeyler saklamak iyi bir fikir değildir, ve gerçekten sadece kullanıcının bilgilerini ve oturum ele önlemek için bir güvenlik belirteci geri gelir benzersiz bir kimliği yazmak gerektiğini söylüyorlar. Yani bu ben oturumda kullanıcının detaylarını yazmak için kullanın, aldım, ama ben de taşındım yaklaşımdır. Bu konudaki görüşler bilmek istiyordu.
  • I birden çok sunucu üzerinde çalıştırmak değil çünkü ben dosya sistemi oturumları tutuyorum, ve ben sadece oturumlarına verilerin küçük bir nebze yazma yaşıyorum beri, i performans yükü azaltmak için dosya sisteminde daha fazla tutarak seans olacağını düşündüm veritabanı. Oturum kimlik üzerine yazıldıktan sonra, gerçekten salt okunur sonra gelen üzerinde.

3) abonelik bilgilerinin izinleri gibi kullanıcının detayları kalanı (,) bilgisi vb hesap (bu her zaman ben bile daha fazla performans isteseydi kolayca bellek taşındı olabilir) dosya sistemi önbelleğe alınır.

  • Böylece yerine oturumda kullanıcının bilgilerini tutmak yerine, kullanıcının bilgilerini dosya sisteminde önbelleğe alınır. Ben Zend_Cache kullanıyorum ve eşsiz önbellek kimliği md5 (/ cache/auth/2892) gibi bir şey, sayı kullanıcının benzersiz kimliği. Ben bu yöntemin yararı Kullanıcı oturum kez, kullanıcının bilgi almak için yürütülüyor veritabanı sorgularını aslında olmadığı sanırım. Bu yaklaşım oturumda sürü tutmak daha iyi olup olmadığını merak ediyorum ...

4) site boyunca hareket ettikçe kontrol edilir tek şey oturumda kimlik ve güvenlik belirteci olduğunu.

Yani, genel olarak ilk soru 1) dosya sistemi bu amaç için bir veritabanı daha verimli 2) i 3) önbelleğe alınmış bir dosyaya bir anlamsız bir görev haline oturumu kullanıcı detay en ayıran yeterli güvenlik önlemlerini almış olduğunu?

Teşekkürler.

2 Cevap

Sen şeylerin bir dizi soruyorsun.

Sessions

PHP oturumları hızlı ve verimli. Bir orta up-to-date sunucu üzerinde küçük bir disk-tabanlı oturumların Binlerce bir performans darboğazı olacak değildir. Bir veritabanında koymak için ne (PHP kılavuzu örnekler vardır çok kolay) kendi işleyicileri yazıyor.

Oturumları hakkında sadece iyi uygulama kuralları hakkında: Sadece web tarayıcılarla bir şey, oturum kimliği verir. Oturumda kullanıcı'kimliği sadece Günlüklü koymak ve bunları gerektiğinde DB gelenler ayrıntıları almak da en iyi uygulamadır. Ayrıca kullanıcı bilgileri değiştirilebilir anlamına gelir ve onlar bir sonraki sayfa güncelleme üzerine olsun.

Eğer bu sorun var ama sadece bir oturumuna bir sürü atma dikkat edecek gibi görünmüyor. Veri birkaç K (diyelim ki, bir kaç düzine skalerler) gayet iyi. Orada birçok nesne ve Büyük veri dizileri savurma fark edilecektir. Belirli bir sayfa için bu yaparsanız, sayfa onunla yapılır kez oturumda atmak hatırlıyorum.

Ayrıca bir oturum değişkeni ile kendi oturum açma zaman aşımı uygulamak isteyebilirsiniz. Çöp toplama ayarları php.ini giriş yapmak için zaman aşımına uğrayan, oturum veri depolama değil yönetmek için tasarlanmıştır.

Caching

Bu karmaşık bir konu olduğunu ve muhtemelen bir şey uygulamadan önce toplama ölçümlerini (genellikle sayfa yükleme süreleri) başlamak gerekir.

Önbelleğe her türlü uygulamak için, önbelleklediğiniz konum verilerinin ömrünü ve ne kadar pahalı yeniden üreten bir önbellek özledim olacak dikkate almak gerekir. Sadece Soruna memcache atma not bir çözümdür; Eğer hala önbelleğe alma parametreleri anlamak gerekir ve nasıl memcache onları yorumlar. Bu da disk tabanlı oturumlar da dahil olmak üzere herhangi bir kalıcı depolama çözümü için de geçerlidir, ancak yüksek profilli ve oldukça saldırgan bir son kullanma mekanizması vardır çünkü memcache vurgulayarak ediyorum.

Bir çoğu kez gözden kaçan örnek bir sayfada veritabanı birden çok kez aynı veriyi yüklerken: İyi bir ORM MySQL sorgu önbelleğe dayanmadan sizin için yapacak. Bir orta derecede meşgul sunucu üzerinde sadece birkaç saniye için bu önbelleğe alma ve veritabanı yük önemli ölçüde düşecek: Başka bir gözden örnek, her sayfada çalışan küçük sorgular vardır.

Birbirlerinin süresinin dolması kullanabiliyorlar çünkü nihayet, çoklu seviyelerde önbelleğe genellikle çok daha etkili ve ölçeklenebilir bir kez daha. Aynı zamanda iyi soyutlayan: örneğin, ORM gizlemek ve all nesneler için görünmez ve otomatik olarak teorik mevcut bulunuyor.

1) Kolayca bir döngü komut dosyası yaparak hangisinin daha hızlı olduğunu test edebilirsiniz. Neyse, dosya sistemini kullanarak bir dezavantajı size db güncellemek önbelleğe alınmış dosya her şey güncellemeniz gerekir olmasıdır. Veri kopyaları genel kötü bir şey olduğunu. Eğer milyonlarca ziyaretçiyi yoksa Ayrıca, ben stratantijenislerin herhangi hızı ile ilgili herhangi bir pratik diffrence olacağını sanmıyorum. Ve ... oturumları da dosya sisteminde saklanır, unutmamak için. Her oturum için bir dosya.

Bir sorgu daha hızlı dosya sistemi daha sonra: Bağlıdır. Sorgu önbelleğe alma etkindir. MySql o şanslı ve sadece bir bellek erişimi gerekebilir daha varsayılan olarak, ve. Değilse, db zaten bir dosya sistemi accass yapmak gerekiyor. İkincisi, optimize nasıl endeks en ile sorgu. Buissy sunucu harddisk nasıl.

3) db onu getiriliyor hızına bağlıdır. Genel olarak, önbelleğe alma hız performansı için büyü yapabilir, ama bellekte önbelleğe daha iyi memcached veya benzeri bir şey kullanarak olacaktır. Genel olarak, i dosyalarında veri kopyalarını önlemek. Ama tabii, bu dosya sistemi önbelleği için gitmek daha, db gelen verileri sorgulamak için secods alırsa. Eğer 10.000 gibi çok sayıda kullanıcı var .. + bazı klasör sistemi yapmak varsa da, aynı klasörde 10.000 önbelleğe alınmış dosyaları koyarak beri çıkışlar accesstime yavaşlatır ...